案例
微信账号:手机号
用户A注销微信账号,需要钱包数据、银行卡数据、亲属卡信息,同时被删除
对一个对象修改,会涉及大量关联对象状态的修改。
需要使所有关联对象的状态保持一致

Aggregate 聚合
对存在引用关系的一组对象的封装
目的:屏蔽掉内部对象之间复杂关联关系,只对外暴露统一接口
根对象、边界
外部引用根对象,内部保持状态一致

Identifier是Entity的唯一标识
聚合根是一个特殊的Entity

微信用户A转账给用户B

私有的无参构造:禁止new的方式创建对象,需要通过工厂创建





repository是操作组件,屏蔽上层领域逻辑和下层数据库实现
通过repository就能够只操作聚合根来实现多对象的状态一致
find是查找整个聚合,save是持久化所有对象的状态

Entity是对领域的建模,PO是对数据表的映射。它们是一对一,一对多,多对一的关系。


上面的代码可以优化,比如WechatAccount中的Nickname被修改,需要保存,调用save则全部保存一遍,duck不必。change tracking问题,可以的做法:
记录聚合中每个对象的版本号,如果被修改,版本号自增,save时检查版本号。可以对这些对象进行切面代理,当对象被修改,代理中就标记已修改,在save时检查标记。
也可以使用已有的主流开源实现。

限界上下文

Bounded Context
BC

DDD 聚合根 限界上下文相关推荐

  1. 商品领域ddd_DDD领域驱动实战 - 限界上下文(bounded context)

    限界上下文定义领域边界,以确保每个上下文含义在它特定的边界内都具有唯一的含义,领域模型则存在于这个边界之内. 通用语言 在事件风暴过程中,通过团队交流达成共识的,能够简单.清晰.准确描述业务涵义和规则 ...

  2. DDD领域驱动设计(DP、Entity介绍;DDD实现流程;DDD聚合Aggregate;限界上下文(Bounded Context))

    DDD(Domain Driven Design) DP(Domain Primitive) define: 一切模型.方法.架构的基础,是指在特定领域.拥有精准定义.可以自我验证.拥有行为的对象,可 ...

  3. DDD微服务架构设计第三课 DDD领域中的聚合、工厂和仓库、限界上下文

    05 聚合.仓库与工厂:傻傻分不清楚 上一讲,我们知道了,要将领域模型最终转换为程序设计,可以落实到 3 种类型的对象设计,即服务.实体与值对象,然后进行一些贫血模型与充血模型的设计思路.但这远远不够 ...

  4. DDD单根 聚合根 实体 值对象

    前言 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称E ...

  5. DDD 实战 (5):限界上下文映射和系统分层架构

    在完成了限界上下文的识别(也就是系统"最粗粒度"的模块划分)后,我们需要对这些上下文之间的协作关系进行分析--即"限界上下文关系映射".也只有在完成上下文关系映 ...

  6. DDD - 聚合与聚合根_如何理解 Respository与DAO

    文章目录 Pre Question 如何理解 聚合和聚合根 利用聚合解决业务上的原子性操作 如何确定聚合和聚合根 Respository VS DAO Pre 通常情况,我们都会面临这样的一个问题: ...

  7. DDD理论学习系列(3)-- 限界上下文

    1. 引言 限界上下文可以拆分为两个词,限界和上下文. 限界:是指一个界限,具体的某一个范围. 上下文:个人理解就是语境. 比如我们常说的段子: "我想静静." 这个句子一般是想表 ...

  8. 1.DDD中的领域对象、值对象、聚合根

    一.DDD中的领域对象.值对象.聚合根 参考地址: DDD-快速理解聚合根.实体.值对象的区别和联系_王瑞学习笔记-CSDN博客聚合根.实体.值对象的关系:1.实体具有ID,生命周期,状态用值对象描述 ...

  9. DDD:聚合根的批量删除是不是可以批量发送请求

    背景 搞了近五年的系统开发,总是抱着一种思维模式,用户的一个操作对应一个请求和一个事务,比如:用户选择了N条记录,我就会向服务器发生一个请求,服务器在一个事务中进行处理.前几天在群里一个前辈反问:批量 ...

最新文章

  1. mysql-dj数据准备-创建班级表
  2. mongoose c++封装
  3. impala java api 操作_Impala实践之六:使用Rest Api
  4. JS+PHP实现登录后自动执行之前的操作
  5. 玩转Android---组件篇---Broadcast Receiver(广播接收器)
  6. 【TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】
  7. html5show()函数怎么写,实例:用JavaScript来操作字符串(一些字符串函数)_基础知识...
  8. 【40周年系列活动】中国干细胞第十届年会(2020·贵阳)第二轮通知
  9. 泰勒·斯威夫特(Taylor Swift)最好听歌曲专辑,喜欢的可以下载保存
  10. rss opml_分享我的OPML,所有人都在做
  11. access用姓名字段统计人数_access题库61-66(1)
  12. Poco库完全使用手册
  13. 程序员写在猝死的前一天
  14. Android设置状态栏的字体颜色
  15. 微信小程序模板消息测试- formId 的获取
  16. JavaFx教程-02第一个javaFX程序
  17. 长春欲造“书城” 自助图书馆让读者在家门口畅快阅读
  18. 经典PID学习感悟(一)-初步认知【比例kp】
  19. mapping文件的编写
  20. R语言把DataFrame的一行变成向量

热门文章

  1. js如何判断保留两位小数
  2. [置顶] 你总能看到的脑残问题
  3. 『技术分享』-- 使用极光 IM 构建聊天功能
  4. 《会计基础:前言》学习笔记
  5. WR703N修砖记 --- 刷机有风险, 折腾需谨慎
  6. (Excel / WPS表格)常用公式、技巧
  7. [linux学习](linuxprobe课程)十二 使用Bind提供域名解析服务
  8. C语言基础 阶乘:输入一个数,输出它的阶乘。
  9. 教育行业BP怎么写?参考这个案例可避开80%的坑丨案例
  10. VMware备份和恢复的方法