类设计 - 返回列表<object> From <object> </object> </object>

时间:2010-04-16 00:02:52

标签: c# .net oop

给出一个简单的类:

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

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

此类的用户将通过读取Xml文件或其他一些数据源来填充List<Person>对象。填充List的逻辑应该在Person类中还是应该保留在调用类中?换句话说,Person类或调用类中是否应该有public List<Persons> GetPersons()方法?或者数据访问者是否应该完全属于另一个类?

我知道这是一个相当简单的问题,但我只是好奇其他人通常是怎么做的。

2 个答案:

答案 0 :(得分:4)

如果数据存储稍后更改怎么办?如果Person不再存储在XML文件中而是存储在数据库中怎么办?现在您需要再次更改Person类。我想说有一种叫做“IPeopleRetriever”的界面:

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

然后,有一个名为XMLPeopleRetriever的类:

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

这样,你的IPeopleRetriever的消费者不需要知道Person的来源。

答案 1 :(得分:0)

这取决于。对于你所说的,我会说不,并创建另一个类来填充你的Person类。但是,有时您可能希望从List<T>返回T。一个例子是树。你可以拥有一个带有返回相同类型的通用列表的方法的类。

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

话虽这么说,你的例子在任何方面都没有真正的递归,所以我还有另一个类实际创建List<T>。这完全是依赖关系。如果您希望以不需要Person对象列表的方式使用您的类,那么您的类可能会不必要地创建对象。