Класс Дизайн - Возвращение списка <Object>От <Object> - PullRequest
3 голосов
/ 16 апреля 2010

Учитывая простой класс:

public class Person 
{
    public string FirstName;
    public string LastName;

    public string GetFullName() 
    {
     return FirstName + LastName;
    }
}

Пользователь этого класса заполняет объект List<Person>, читая файл XML или другой источник данных. Должна ли логика заполнения списка находиться в классе Person или она должна просто оставаться в вызывающем классе? Другими словами, должен ли быть метод public List<Persons> GetPersons() в классе Person или в вызывающем классе? Или средство доступа к данным должно быть вообще в другом классе?

Я знаю, что это довольно упрощенный вопрос, но мне просто любопытно, как это обычно делают другие.

Ответы [ 2 ]

4 голосов
/ 16 апреля 2010

Что если хранилище данных изменится позже?Что если человек больше не будет храниться в файле XML, а скорее в базе данных?Теперь вам нужно снова изменить класс Person.Я бы сказал, что есть какой-то интерфейс под названием «IPeopleRetriever» или что-то в этом роде:

public interface IPeopleRetriever
{
   IEnumerable<Person> GetPeople();
}

Затем создайте класс с именем XMLPeopleRetriever:

public class XMLPeopleRetriever : IPeopleRetriever
{
   public IEnumerable<Person> GetPeople() { ... }
}

Таким образом, потребителю вашего IPeopleRetriever понадобитсяничего не знать о том, откуда пришел Человек.

0 голосов
/ 16 апреля 2010

Это зависит. За то, что вы говорите, я бы сказал «нет» и создал бы другой класс, чтобы заполнить ваш класс Person. Однако в некоторых случаях вы можете захотеть вернуть List<T> из T. Одним из примеров является дерево. У вас может быть класс с методом, который возвращает общий список того же типа.

public class Node()
{
    public List<Node> GetChildNodes()
    {
        //etc...
    }
}

При этом ваш пример на самом деле не звучит рекурсивно, поэтому я бы предложил другому классу создать List<T>. Это действительно все о зависимостях. Если вы когда-нибудь захотите использовать свой класс так, чтобы не требовался список объектов Person, тогда ваш класс может создавать объекты без необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...