2010-04-16 24 views
3

給出一個簡單的類:類的設計 - 返回一個列表<Object>從<Object>

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()方法嗎?或者數據訪問者應該完全在另一個類中?

我知道這是一個相當簡單的問題,但我只是好奇別人通常如何做到這一點。

回答

4

如果稍後數據存儲更改會怎麼樣?如果人員不再存儲在XML文件中,而是存儲在數據庫中,該怎麼辦?現在您需要再次更改Person類。我會說有某種所謂的「IPeopleRetriever」接口之類的東西:

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

然後,有一類稱爲XMLPeopleRetriever:

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

這樣一來,你的IPeopleRetriever的消費者需要什麼都不知道人的來源。

+0

這似乎是一個很好的......呃......策略。 – 2010-04-16 00:18:19

+0

另外,應該指出的是,_uses_'IPeopleRetriever'不應該是_creates_「IPeopleRetriever'的一個實例。 – 2010-04-16 00:19:20

0

這要看。對於你所說的話,我會說不,並創建另一個類來填充你的Person類。但是,有時您可能想從T退還List<T>。一個例子是一棵樹。您可以使用返回相同類型的通用列表的方法來創建類。

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

話雖這麼說,你的例子並沒有真正健全的遞歸以任何方式,所以我有另一個類實際創建List<T>。這完全是關於依賴關係。如果您想要以不需要Person對象列表的方式使用您的類,那麼您的類可能會不必要地創建對象。

相關問題