4 Comments

  1. 裕刻小码

    谢谢博主!连着看博主的系列文章过完一个美好的假期!
    我也想借宝地问几个细节问题:
    1 聚合根可能代表的是[某一个]领域对象,那么遇到业务上需要批量操作的时候,比如对某一类单据进行批量审核,是怎么处理的?类似的问题还有:聚合根如何面对”循环更新”这个话题?
    2 聚合根的repository的保存,都是对列的直接赋值吗, 怎么做增量呢?(类似 udpate member set balance = balance-100 where id =1 这种)。比如这个场景:下订单前要对顾客信用余额进行判断以及预扣除。

    • x

      第一个问题的解答:
      1. 你可以让前端发送N此请求
      2. 你可以让前端发送1次请求,后端使用一个涉及N个实体的事务
      3. 你可以设计一个概念“Batch { 单据ID列表: [] }”。Batch审核完成时,发送1个领域事件,接收方设置N个票据的状态。本质上还是涉及N个实体的事务
      4. 不要怕事务横跨多个聚合根。

      对于第二个问题:
      1. 不要使用SQL思维来做DDD,要使用实体思维。例如,微软的实体框架(ORM EF)就只能进行以下操作:a 取实体;b 修改余额;c 存实体。这样做固然有性能劣势,但是如果不足以成为瓶颈就不用担心

    • 宋洋

      class User{
      Blog createBlog(String blogName){
      //我创建的博客不想人别人评论,那么我需要为Blog定义一些我自己博客独有的参数
      BlogSettins settings = new BlogSettings({
      enableComment = false;
      });
      //他需要的我都提供了。剩下的时他的职责
      return Blog.create(blogName,settings);
      }
      }

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据