我已经完成 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 映射能否以某种方式支持这种关系?