1

我有一個關於存儲庫訪問位置的問題。允許或包含Repository維護的實體內的Repository訪問是否可接受?與存儲庫模式的關注分離

例如:

class Product 
{ 
    public int ProductID {get;set;} 
    public int Name {get;set;} 
    public IList<Product> Products {get;set;} // A Product may be a bulk item that contains several individual items. 
    public int VendorID {get;set;} // Key to another table that list vendor info. 
} 

public class ProductRepository : IRepository 
{ 
    public Product GetProduct(int id) {} 
    public IList<Product> GetProducts() {} 
} 

幾個問題:

  1. 應該在哪裏檢索來自其它表的信息放置在何處?倉庫,服務,實體等。這也適用於散裝物品的包含產品?
  2. 什麼時候應該發生這種情況,在檢索產品時,或者供應商/子產品訪問時?

回答

1

我建議看看ORMs(對象關係映射器)處理這類問題的方式;總的來說,他們處理它的方式是存儲庫根據需要管理所有序列化/反序列化;有一些相對複雜的邏輯繼續對樹中的元素進行反序列化(延遲加載等)。 ORM空間已經考慮了許多這些問題,並且有一些解決方案考慮了每種潛在解決方案的深入細節,因此這是適合尋找的地方。作爲一個起點,考慮一下Hibernate如何做它的魔力;這是一個廣泛使用的ORM,具有相當不錯的設計。

特別是,我強烈建議不要試圖自己實現這種東西;使用ORM進行研究(再一次,Hibernate強烈推薦,從我和其他人處理)來處理這個過程的細節;他們已經解決了許多這樣的問題。

+0

感謝您的快速響應。我已經看過NHibernate,但是,它看起來有一些學習,以實現。我正在研究的這個項目真的是用於練習。我對使用NHibernate有一段時間感興趣,或許現在是時候潛入。 – Neal

+0

@Neal:您的問題表明您正在查看ORM提供的答案的確切方向,所以我認爲您很可能在調查Hibernate會給你最大的結果的正確點。 –