zoukankan      html  css  js  c++  java
  • DDD:在基于关系数据库的领域,聚合的边界等于并发管理的边界。

    背景

    领域驱动中关于聚合设计的原则一直存在一个模糊的定义,比如:不变量、一致性和一个边界。根据这些规则很难清晰的划分聚合,不排除聚合的设计有一定的艺术性,但是在限定的领域内或许有某种可以明确遵循的规则,前几天我好像思考到了这样一个规则,这里分享给大家,跪求批评。

    规则(在基于关系数据库的领域,聚合的边界等于并发管理的边界。)

    为了满足不变量和一致性,毫无疑问我们要采用并发管理。

    正确的聚合设计

    下图中只有一个聚合实例,在聚合根中应用乐观锁保证聚合的一致性,一个聚合必须做为一个整体进行操作,如:客户端修改“明细”时,其加载和保存的JSON数据必须包含“聚合根”。

    错误的聚合设计

    下图中只有三个聚合实例,在聚合根中应用乐观锁保证聚合的一致性(注意是三个聚合),因为每个聚合都可以独立的操作,因此很难保证概念的一致性(明细的权重之和等于100%),比如:假如目前明细的权重之和还差10%,两个人同时添加一个10%的明细。这种设计不是不能保证概念的一致性,是需要额外的成本,如上面的问题:采用双验证(插入前后都进行一次验证)。

    正确的聚合设计

    多数对象之间不存在并发管理的需要(独自还是有这个需求的),像文章和评论之间是没有任何并发管理需求的,你不期望A发表评论的时候B就不能发表了或者你修改文章的时候别人不能发表评论了。

    备注

    聚合的设计也就是领域模型的设计是DDD的重点,我也没有太多经验可言(失败的倒是有),希望朋友们多给意见。

  • 相关阅读:
    文字对战小游戏~~~
    面向对象--类库、委托、is和as运算符、泛型集合
    推箱子
    算法训练 K好数
    用memset设置无穷大无穷小
    算法训练 关联矩阵
    未名湖边的烦恼
    数字三角形
    算法训练 最大最小公倍数
    算法训练 区间k大数查询
  • 原文地址:https://www.cnblogs.com/happyframework/p/3125565.html
Copyright © 2011-2022 走看看