Domain driven design DDD-域服务的聚合根持有引用

Domain driven design DDD-域服务的聚合根持有引用,domain-driven-design,ddd-repositories,aggregateroot,Domain Driven Design,Ddd Repositories,Aggregateroot,我的聚合根目录持有域服务的引用以“保存自身”,而不持有对任何存储库的引用,这是否可以接受 这背后的想法不是让应用程序服务的代码类似于myDomainService.UpdateOrAdd(myAggregateRoot),而是类似于myAggregateRoot.Update() 我的聚合根目录持有域服务的引用以“保存自身”,而不持有对任何存储库的引用,这是否可以接受 DDD并没有一个真正的标准机构,或者类似的东西,所以可接受性将是一个主观判断 不过,这很奇怪,如果你把它带到代码审查中,我希望会

我的聚合根目录持有域服务的引用以“保存自身”,而不持有对任何存储库的引用,这是否可以接受

这背后的想法不是让应用程序服务的代码类似于
myDomainService.UpdateOrAdd(myAggregateRoot)
,而是类似于
myAggregateRoot.Update()

我的聚合根目录持有域服务的引用以“保存自身”,而不持有对任何存储库的引用,这是否可以接受

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);
所以,最小惊喜原则;如果您遵循通常的模式,继承代码责任的开发人员将更轻松地完成这项工作

我的聚合根目录持有域服务的引用以“保存自身”,而不持有对任何存储库的引用,这是否可以接受

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);
所以,最小惊喜原则;如果您遵循通常的模式,继承代码责任的开发人员将更轻松地完成这项工作