2015-08-19 4 views
0

Я заметил, что я делал это много (в основном потому, что все мои методы не являются статическими):Это хороший подход для вызова метода на конструкторе в C#?

var person = new Person(); 
var addresses = person.GetAddresses(); 

Много раз мне просто нужно вызвать метод один раз в моем другом методе , Я заметил, что могу просто сделать это вместо этого:

var addresses = new Person().GetAddresses(); 

Есть ли проблемы с этим? Мне кажется, что гораздо меньше набирает текст для меня. Например, если бы я хотел, чтобы загрузить модель с адресами, я могу просто сделать:

public ActionResult HelloWorld() { 
    var model = new MyModel { Addresses = new Person().GetAddresses() }; 
    return View(model); 
} 

Что вы думаете, ребята?

Btw, мои методы нестатические, потому что я использую репозиторий. Мой класс настроен примерно так:

private IMyRepository _myRepository = new MyRepository(); 

Person() { 
    // initialize properties 
} 

// Constructor for unit testing... 
Person (IMyRepository repository) : this() { 
    _myRepository = repository; 
} 

public GetAddresses() { 
    return _myRepository.GetAddresses(); 
} 
+1

Класс person - это хранилище и ваш POCO/Model? Если это так, это активная запись, а не шаблон репозитория! Если нет, не следует ли его называть PersonRepository? Если вы хотите получить адреса, как насчет класса AddressRepository с помощью метода GetAddressesByPerson? –

+0

Я только что обновил свой вопрос с большим количеством кода о том, как настроен мой класс Person. Он использует репозиторий. Это не репозиторий. – user1005793

+2

Почему конструктор Person получает IMyRepository? Ваши классы моделей должны быть отделены от доступа к данным и никогда не беспокоиться об этом. Похоже, вы нарушаете [принцип единой ответственности] (https://en.wikipedia.org/wiki/Single_responsibility_principle). Я думаю, что реализация «IPersonRepository» должна отвечать за настройку атрибута Addressess (или что-то в этом роде) вашей модели. –

ответ

1

Это нормально, это не вызовет никаких проблем. Хотя сомнительно иметь класс, который сразу же выброшен. Может быть, GetAddresses должен быть статическим?

Но в любом случае, это прекрасно.

+0

Спасибо за комментарий. Это не статично, потому что я использую шаблон репозитория. Таким образом, я легко могу легко тестировать класс. – user1005793

0

это нормально, чтобы сделать это, , но если вы хотите некоторые рабочие места только после создания объекта человека, вы можете создать событие и поднять его в конструкторе, то у вас есть объект и некоторые пользовательские данные в вашем собственное событие args в вашем основном классе. , если это полезно, я могу отправить вам пример кода

Смежные вопросы