博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
领域驱动设计之聚合与聚合根实例一
阅读量:4591 次
发布时间:2019-06-09

本文共 669 字,大约阅读时间需要 2 分钟。

通过一个实例来说明如何划分聚合与聚合根

场景:一个下订单的业务,一个订单必须有相应的客户信息,订单下有订单项,每个订单项必须有相应的产品信息,产品有分类的信息。

1.根据这个基本的需求,我们初步确定的实体、值对象与关联关系为(这里采用EF的Model First):

2.经过业务深入分析,以及聚合与聚合根确定原则,最终我们确定的聚合与聚合根是(红色代表聚合根,蓝色代表聚合内的实体,灰色代表值对象):

划分与确定理由

1.订单、客户与产品都可以在不同的领域被独立访问到,所以应该是属于不同聚合的聚合根。

2.订单初看好像要依赖于客户才能存在,其实不然,一是订单的生命周期与客户的生命周期不是一致的,二是订单与客户之间也没有不变的一致性规则。

3.订单只需要下订单那个时刻客户的姓名、电话与地址等相关信息,所以作了一个值对象保存那个时刻的客户相关信息,因可能业务上需要通过订单查询客户当前的信息,所以做了一个客户ID关联到客户对象。

4.订单项也只需要那个时刻的产品的名称、单价等信息,所以作了一个值对象保存那个时刻的产品相关信息,因可能业务上需要通过订单项查询产品当前的信息,所以作了一个产品ID关联到产品对象。

5.产品初看好像要依赖于产品类别,实际上产品类别只是对产品的一种划分,所以产品类别做成值对象,如果业务上要对某个产品类别进行促销等业务逻辑,则产品类别应该划为一个单独聚合的聚合根。

 

欢迎加入QQ讨论群:309287205

 

转载于:https://www.cnblogs.com/malaoko/p/4993457.html

你可能感兴趣的文章
win10 安装mysql
查看>>
SQL文 Update From 写法
查看>>
pyc文件的本质
查看>>
洛谷 - P2602 - 数字计数 - 数位dp
查看>>
android 环境配置 与 运行错误
查看>>
打电话的代码
查看>>
C++ STL stack(栈)
查看>>
实验3观后感
查看>>
用js采集网页数据并插入数据库最快的方法
查看>>
final关键字
查看>>
作业七
查看>>
【HNOI2006】【Luogu2320】鬼谷子的钱袋(进制,玄学)
查看>>
爬虫大作业
查看>>
spring boot之actuator简介
查看>>
以太坊(一)
查看>>
禁用php函数
查看>>
11.5随笔
查看>>
[err]default argument given for parameter 3 of '***'
查看>>
spring bean depends on
查看>>
51nod1256【exgcd求逆元】
查看>>