[英]ICollection in class
我遇到以下代碼:
public class Basket
{
public Guid BasketId { get; set; }
public DateTime Date { get; set; }
public virtual ICollection<BasketItem> BasketItems { get; set; }
public Basket()
{
BasketItems = new List<BasketItem>();
}
}
我不太了解的部分是,為什么我們要把
public virtual ICollection<BasketItem> BasketItems { get; set; }
代替
public virtual List<BasketItem> BasketItems { get; set; }
我能想到的一個原因是,當繼承此類時,我們可以使用不同的類型覆蓋BasketItems嗎?
這樣做的其他原因是什么?
因為BasketItems
不需要是列表。 請注意,setter是公開的。 正如您所指出的,它也可以被覆蓋。
它本質上說,只要BasketItems
是集合BasketItem
,這就是我們需要知道的。 我們不在乎如何實現集合。
盡可能避免使用具體類型通常是一種好的設計做法。 實際上,它為您帶來了許多強大的優勢,這些優勢在SOLID- SOLID Wikipedia的依賴項倒置原則中已得到充分證明。 長話短說,一個好的設計不會使您陷入困境,因為它允許用戶在他們認為合適的情況下擴展屬性,並降低了維護成本,因為作為作者,您不必為每個實現都創建新的類類型ICollection。
這里的另一個大好處是單元測試。 避免使用具體類型可以簡化單元測試中的依賴關系。 這導致測試更小,更精確。 對於更多信息的好處,這里有一個很好的解釋- 接口如何使單元測試和模擬更容易?
還有一點: ICollection
通常也用於DataEntity中的多對多關系。 您可以參考(MSDN: http : //msdn.microsoft.com/zh-cn/library/92t2ye13.aspx )是需要迭代和修改的對象列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.