Questions tagged «aggregate»

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

2
如何设计总体边界?
我想编写一个类似电子商务的应用程序。 您知道,在类似的应用程序中,产品可能具有不同的属性和功能。为了模拟这种机会,我创建了以下域模型实体: 类别 -这类似于“电子产品>计算机”,即产品类型。分类包含属性列表(List <属性>)。 属性 -包含名称,度量单位,数据类型的独立实体。例如“名称”,“重量”,“屏幕尺寸”。同一属性可以具有不同的产品。 产品 -仅包含名称和与属性有关的值列表。值是一个仅包含值字段和属性的字段ID的对象。 我最初决定在此方案中使Category像单个聚合一样,因为例如当我添加新产品时,我需要知道与当前类别有关的所有数据,包括与当前类别有关的属性(category.AddNewProduct(product))。但是,当我只需要添加不属于任何类别的新属性时该怎么办。例如,我不能执行此category.AddNewProperty(property),因为它明确表示我们将属性添加到特定类别。 好的,下一步我决定将Property划分为单独的聚合,但是它将是一个包含简单实体的列表。 当然,我可以创建诸如PropertyAggregate之类的内容以保留在属性和业务规则列表中,但是当我添加产品时,我需要在类别内具有属于该类别的属性的整个列表,以检查不变量。但是我也意识到,将链接内的链接保留在其他聚合上是一种不好的做法。 设计此业务案例有哪些选择?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.