我将深入研究领域驱动设计,而我遇到的一些概念从表面上看很有意义,但是当我更多地考虑它们时,我不得不怀疑这是否真的是一个好主意。
例如,聚合的概念很有意义。您可以创建较小的所有权域,这样就不必处理整个域模型。
但是,当我在Web应用程序上下文中考虑此问题时,我们经常访问数据库以拉回小的数据子集。例如,页面可能仅列出订单数量,并带有单击链接以打开订单并查看其订单ID的链接。
如果我理解正确的聚集,我通常会使用存储库模式返回,将包含成员的OrderAggregate GetAll
,GetByID
,Delete
,和Save
。好的,听起来不错。但...
如果我调用GetAll列出我所有的订单,那么在我看来,这种模式将需要返回整个汇总信息列表,完整的订单,订单行等...当我只需要该信息的一小部分时(仅标头信息)。
我想念什么吗?还是在这里使用某种程度的优化?我无法想象有人会主张在不需要时返回全部信息。
当然,可以在您的存储库上创建诸如之类的方法GetOrderHeaders
,但这似乎违背了首先使用诸如存储库之类的模式的目的。
谁能为我澄清一下?
编辑:
经过大量研究后,我认为这里的脱节之处在于,纯存储库模式与大多数人认为的存储库模式不同。
Fowler将存储库定义为使用集合语义的数据存储,通常存储在内存中。这意味着创建整个对象图。
Evans修改了存储库以包括聚合根,因此截取了存储库以仅支持聚合中的对象。
大多数人似乎将存储库视为美化的数据访问对象,在其中您只是创建获取所需数据的方法。正如Fowler的企业应用程序架构模式中所描述的那样,这似乎并不是目的。
还有一些人认为存储库是一个简单的抽象,主要用于简化测试和模拟,或将持久性与系统的其余部分分离。
我猜答案是,这是一个比我最初想象的要复杂得多的概念。