0

我已经完成 DDD 几年了,但在设计聚合方面仍然具有挑战性。这就是 DDD 的有趣部分,它让你头晕目眩。我问这个问题是因为我是一个项目的架构师,我们正在设计模型。当模型与 GUI 并行发展并与客户一起收集需求时,它是一个迭代。现在来解决问题。我们的场景是我们正面临一些正在成长为非常大的 AR 的聚合。我认为我擅长寻找价值对象并避免贫血的领域模型陷阱。但我从来没有遇到过这种情况。一个例子是我们的系统应该代表一个移动电信天线。天线位于绿色区域。但是天线可以有一个带有设备的庇护所。天线可以有微波链路,它可以在地面有光纤线,它可以有无线电元件,它可以有电源。面对它。如果 Antenna 被终止......所有这些依赖关系也会被删除。因为它们是安装的一部分(除了绿色区域:))但是你明白了。天线模型很复杂……而且大型 AR 在并发锁、性能、内存消耗方面不灵活。

在阅读了 Vaughn Vernons 关于有效 AR 设计的非常好的论文http://dddcommunity.org/library/vernon_2011/之后,我意识到我们需要开始将我们的大型 AR 分割成碎片。

我的想法是像 Vernon 建议的那样去做,例如将 MicrowaveLinks 移出到单独的 AR(即使它不在现实中)。MicrowaveLink 实体,现在是 AR,是 Id 的参考天线。在 MicrowaveLink 实体类中,我们有一个值对象属性,即 AntennaId。我们的用例支持这种情况。我们很少将天线和链接一起列出。因此可以通过 MicrowaveLinkRepository.ListByAntenna(Guid antennaId) 加载 MicrowaveLinks

1)你之前做过这个AR拆分吗?你是怎么做的?2)您是否设法通过域约束和数据库(我们使用 EF 5 作为 ORM)完整地支持这个 AR --> AR 关系?

我的最佳目标是能够跳过 Antenna.Microwaves Collection on Antenna。所以天线不知道是否有链接。链接知道它们安装在什么天线上。在 MicrowaveLink 实体中,我只想要一个 AntennaId 属性,并希望有一个确保 Antenna 存在的 DB 约束。

我知道我可以通过 T-SQL 脚本直接在 EF 或 DB 中的 Seed 方法中手动添加 FK 约束。但是 EF5 Code First Fluent 映射能否以某种方式支持这种关系?

4

1 回答 1

1

通过它的声音你有一个InstallationAR。当需要另一个 AR 时,您应该将包含的 AR 建模为容器中的唯一 ID,或者如果需要,则为 VO。

你需要在你的 AR 周围有硬边。

回到Order/OrderLine例子 :)

AnOrderLine似乎“需要”一个 Product 但你不应该给一个 Product 实例 tot eh OrderLine。取而代之的是,仅将ProductNameand建模ProductIdOrderLine. 现在你的OrderAR 有了明显的优势。

希望能有所帮助。

于 2013-07-12T17:03:29.640 回答