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会给你最大的结果的正确点。 –