oop – 聚合根的行为是否应该依赖于其他聚合根的属性?
我正在读一本关于DDD的书,我看到一个涉及汽车,发动机,车轮和轮胎的示例域.
以上是本书中的模型.客户也是聚合根. 所以我再问一遍,如果汽车使用发动机的属性将其装入内部(允许它或不是它的一部分),这是一个问题吗? 解决方法
没有. 话虽这么说,您的验证可能足够复杂,以引入域服务.由于涉及两个聚合,您可以这样: car.Fit(engine) 或这个: engine.Fit(car) 但是,您可能想要检查汽车模型:) 由于规则会更高级并涉及一些数据,您可能想要引入域服务并可能在对象上使用双重调度: 所以,而不是car.Fit(引擎),你可以这样: car.Fit(engine,IModelServiceImplementation) 并在Fit方法调用中: if (!IModelServiceImplementation.CanFit(car,engine)) { throw new Exception(); } 该服务可能加载正确的模型,而不是检查引擎.根据域,甚至可能有修改级别和其他规则来处理. 由于Car实例不包含实际的Engine实例,而只包含EngineId或可能包含某个值对象,因此不会将引擎真正分配给汽车.您仍然可以将引擎实例传递给汽车并让它创建关联,但它认为合适. ‘Enrico S.’提出的解决方案可能与对聚合根进行更改的情况更为相关,其中可能没有所有聚合根可用,或者甚至聚合根存在于单独的有界上下文中.即使汽车和发动机位于不同的BC中,也许能够以某种方式查询有效性.有些东西可以用于最终的一致性,但其他东西可能不是. 像往常一样有很多事情需要考虑:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |