mry-backend icon indicating copy to clipboard operation
mry-backend copied to clipboard

关于DDD的一些疑问

Open higbos opened this issue 1 year ago • 2 comments

看了关于DDD的系列文章和代码,深受启发,但还有几个疑问想要请教: 1.涉及多个聚合的操作,使用领域事件还是将逻辑在应用服务中编排?从代码上看,貌似区别仅在于多个聚合操作是否在同一个事务下? 2.代码中的RepeatableTask和OnetimeTask两个Marker接口,没发现其实际的作用,其设计意图是什么呢? 3.2中的两个接口,在注释中有这样的描述:'保证一个Task只做一件事情,即只操作一种聚合',但看代码中貌似并没有严格遵循这个约定,如SyncOrderToManagedQrTask中,操作了QR、Submission等聚合,这里的设计考虑是什么呢?

higbos avatar Jun 27 '23 06:06 higbos

  1. 对于多个聚合操作,没有标准答案,我的代码中是放到同一个事务中,在应用服务中进行编排的。我一般的做法是,如果多个聚合根属于同一个限界上下文,那么为了简单起见直接在应用服务中编排,但是如果同时操作的聚合根过多(比如大于2个),那么就得想想是不是模型设计上出了问题;而对于不同限界上下文的聚合根,通常还是采用事件驱动的方式。
  2. 这个接口属于marker接口,让我自己在做代码导航的时候更加方便,比如需要查看所有的OnetimeTask的时候。另外,RepeatableTask上面其实有用于重试的“@Retryable”注解,这样我就不用在每个实现类中打@Retryable了。
  3. 一个task只做一件事情是一个目标,但是并不是强限制,代码中总会有很多“万一”的情况发生。

davenkin avatar Jul 02 '23 10:07 davenkin

image 第一个问题,作者貌似全都放在应用服务里头编排的

lxqgithub avatar Aug 14 '24 01:08 lxqgithub