我很清楚为什么以及如何使用存储库,这同样适用于查询对象,只要您需要(例如,完全反映数据库中的内容的对象),它们似乎都很容易理解。
但是我似乎无法理解那些正好适合我正在建造的特定结构的物体。
我有产品和类别,他们都有自己的存储库。
我的类别存在于自引用的父子结构中。
我的产品属于没有子类别的类别。
现在我需要提取这些数据来组合一个菜单,如下所示:
数据:
然后我需要一个菜单,就像这样:
这将是供应商在我们的市场中拥有产品的所有顶级类别的列表,其中随机选择的产品列表属于该顶级类别,无论类别级别如何。
一切都很好,我完成了所有工作。 现在我只想了解这种结构在一个架构中的位置,该架构的存储库基本上每个表包含一个对象。
如何匹配我的存储库,它将原始数据镜像到完全不同的业务对象中?
如果有人能指出我要解决这个问题的好文章,那就太好了。
答案 0 :(得分:1)
存储库模式出现在DDD的背景下,阅读的最佳书籍将是原始的Domain-Driven Design: Tackling Complexity in the Heart of Software
埃文斯一遍又一遍地说的一件事是,域名的所有概念都必须是明确的。
您的菜单代表什么? 它是否在域中有名称?
让我们说它确实如此,并且它是"每周推广产品的概念"然后你可以使这个概念明确 - 并为此引入一个单独的类,具有可以读取数据的单独存储库从产品表,从类别表中提出推广产品列表。
请注意,根据Evans的说法,我们的域和持久性模型不必匹配,我们不需要为每个域对象设置一个存储库(具体来说,我们应该仅具有存储库对于聚合根,引用所有其他实体应该通过遍历聚合根的关联获得
或者,在设计中,有点偏离DDD,您可以将选定的促销产品放在产品库中,预先加载类别,并在产品上只有一个TopCategory计算属性
请注意,如果新实体"促销产品"纯粹是虚拟的,你只计划进行读取操作,而不改变其状态,那么应用Command Query Responsibility Seggregation很有意义,并为&#设置一个单独的读取模型34;推广产品"在您的主域模型之外。