DDD - 域服务的聚合根保持参考

时间:2017-07-12 00:34:25

标签: domain-driven-design ddd-repositories aggregateroot

我的聚合根持有域服务的引用是否可接受,以便自己保存自己"而没有持有对任何存储库的引用?

这背后的想法是没有像myDomainService.UpdateOrAdd(myAggregateRoot)这样的代码的应用程序服务,但像myAggregateRoot.Update()

这样的代码

1 个答案:

答案 0 :(得分:2)

  

我的聚合根是否可以保留域服务的引用,以便在不保留对任何存储库的引用时“自行保存”?

DDD实际上没有标准组织,或类似的东西,所以可接受的将是一种主观判断。

很奇怪,如果你把它带入代码审查中,我会期待很多回击,只是因为它与通常的惯例相反。

传统方法是聚合根对象只是域模型中的一个实体,因此实现中的代码应该看起来像域代码,而不是基础结构代码。因此,保存聚合状态的责任通常分配给存储库,而不是对象本身。

从应用程序的角度来看,很难区分你描述的代码,这可能看起来像

// TradeBook is the root of the aggregate
TradeBook book = repository.getById(...);
book.placeOrder(...)
book.update();

和更常见的拼写

TradeBook book = repository.getById(...);
book.placeOrder(...)
repository.save(book);

所以,最不惊讶的原则;如果您遵循通常的模式,那么继承您代码责任的开发人员将会更容易地使用它。