DDD架构

一、聚合(Aggregate)

员工和技能这两个实体有两个重要特征。

  1. 第一,具有整体与部分的关系。也就是说,逻辑上,员工信息是整体,而技能信息是员工信息的一部分。
  2. 第二,具有不变规则,而且这种不变规则在并发的时候可能被破坏。要防止规则的破坏,仅仅锁住一条技能记录是不够的,必须把员工和所有技能作为一个整体锁住才能解决。或者说,员工和他的所有技能确定了一个事务边界。

具有这样特征的一组领域对象,在 DDD 里就叫做一个聚合(Aggregate)。

聚合就是保护业务规则的一种有效手段。

在一个聚合里,像员工这样代表整体的实体就是聚合根。一个聚合只有一个聚合根。

  • 聚合是 DDD里的一个重要模式,主要作用是维护不变规则。如果一组对象具有整体部分关系,并且需要维护整体上的不变规则,那么就可以识别为一个聚合。其中表示整体的那个实体叫做聚合根。
  • 为了在模型中表示聚合,我们使用了叫做 的衍型来表示聚合根;在关联上用空心菱形符号表示整体部分关系;并用一个包把聚合包起来,包的名字一般和聚合根的名字相同。另外,在识别客户经理等聚合的时候,我们还介绍了派生关联。
  • 通过整体部分这一特征,我们还可以推出其他几个特征,包括:表示部分的实体只能属于一个聚合,并且不能再变成其他聚合的一部分;聚合根被删除的话,整个聚合的实体都要被删除;聚合根有全局标识,非聚合根实体只有局部标识。
  • 聚合的作用,除了确保不变规则以外,还为我们增加了一个分析业务规则的视角,将业务规则和事务联系起来,增加了模型的清晰度,并且使开发人员更容易确定事务的范围。

对于导航的设计来说,我们采用一种折衷的方式:在聚合内部使用对象导航,跨聚合则使用 ID 导航。

为了保证不绕过规则的校验,非聚合根对象就不能由外界直接创建或修改。这就得出了聚合编程的一个重要原则:聚合外部对象对非聚合根对象只能读,不能写,必须通过聚合根才能对非根对象进行访问。

为了确保不变规则不被破坏,总的原则是:聚合外部对象对非聚合根对象只能读,不能写,必须通过聚合根才能对非根对象进行访问。用到的具体技术包括用包级私权限封装构造器和方法,返回不可变列表,用聚合根创建和访问非根对象等。

猜你喜欢

转载自blog.csdn.net/luoyuan323/article/details/130288400
ddd