04、DDD如何保护领域模型

​ 上一讲中,我们已经提到了领域服务、实体和值对象的重要性,基于这些基础对象,就能够形成一个基础的领域模型。我们对这个领域模型进行一些贫血模型和充血模型的设计,就能搭建出一套基于领域模型设计的应用架构。这种应用架构由于功能相对内敛,所以很容易设计出“高内聚,低耦合”的高质量应用。但是设计出这样的基础领域模型其实还只是第一步,在后续领域模型具体落地的过程中,以及后续的业务需求迭代过程中,如何保护领域模型不退化,依然有很多问题需要解决。而这些问题,光靠领域模型本身是远远不够的,还需要有其他的武器,来帮助保护领域模型的稳定性。这时,就轮到聚合、仓库和工厂出场了。

聚合与聚合根

聚合

​ 之前已经提到过,在DDD中,实体和值对象是最为基础的领域对象。实体一般对应业务对象,他具有业务属性和业务行为;而值对象主要是属性集合,对实体的状态和特征进行描述。但是,实体和值对象都是只个体化的对象,他们的行为表现出来的更多的是个体的能力。而如果需要让这些个体协同工作,那就还需要聚合(Aggregator)。例如在我们上一章节讨论的转账过程,单个账户的余额变动,体现的就是这种个体的业务能力。而用户扣减余额和商户增加余额这两个操作一起,才构成了转账这么一个业务。

聚合是用来确保这些领域对象在实现共同的业务逻辑时,能保证数据的一致性。 具体到业务中,他表达的就是真实业务中的整体与部分的关系。比如发票与发票明细、商品与商品描述等。这些关系在数据库中,可能是分散在不同的表中,而在设计领域实体时,也会设计成不同的实体。但是

DDD专栏4:DDD如何保护领域模型相关推荐

  1. DDD专栏12、专栏总结 走出自己的DDD

    ​ 本专栏到这里,也就进入了尾声.实际上,DDD从2004年就被提出,多年来经过很多大神的研究与分享,DDD已经从高高在上的理论空间慢慢沉淀到了我们身边.业界对于DDD的难点,也从学习理解,下沉到了落 ...

  2. DDD理论学习系列(4)-- 领域模型

    1.引言 我们还是先来拆词理解,领域模型可以拆为"领域"和"模型"二词. 领域:按照我们之前的文章的理解,DDD中的领域是指软件系统要解决的问题,如我们的办公设 ...

  3. DDD专栏1:DDD vs DDD : 怎么防止系统变“老“?

    01-DDD vs DDD : 怎么防止系统变"老"? ​ 关于DDD,之前已经简单做过介绍,即Domain Driven Design.那这里怎么又多出了一个DDD呢?其实另一个 ...

  4. DDD领域模型、贫血模型、充血模型概念总结

    DDD领域模型 领域模型是对领域内的概念类或现实世界中对象的可视化表示.又称概念模型.领域对象模型.分析对象模型.它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系. 业务 ...

  5. 领域模型DDD与聚合根

    领域模型:聚合.聚合根详解 聚合和聚合根是领域模型里面很重要的一个概念,其实我们在从真实世界对业务对象进行识别和概念建模的时候,关注的就是聚合根,这才是我们真正要管理的业务对象.一个对象可能有多个层次 ...

  6. 京东平台研发:领域驱动设计(DDD)实践总结

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...

  7. ddd领域驱动设计_领域驱动设计(DDD)理论启示

    过去几年通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量.高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动.频道搭建和运营能力,主流程的新需求越来越少,个 ...

  8. MVC模式和DDD模式对比,谁才是银弹?

    目录 MVC模式和DDD模式对比,谁才是银弹? 从DDD的角度看MVC架构的问题 第一层:初出茅庐 第二层:草船借箭(战术设计) 第三层:运筹帷幄(战略设计) DDD的不足 总结 MVC模式和DDD模 ...

  9. 京东研发团队 - 领域驱动设计(DDD)实践

    过去几年,通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量.高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动.频道搭建和运营能力,主流程的新需求越来越少, ...

最新文章

  1. 信标组裁判系统原理与实现
  2. Adhesive框架系列文章--分布式组件客户端模块使用
  3. 程序猿小白应该注意什么
  4. Struts 2 标签库详解
  5. CS231n 学习笔记(4)——神经网络 part4 :BP算法与链式法则
  6. 早起5件事,让你年轻10岁
  7. 趣味Python入门(一):初识Python
  8. 从零开始——电子商务平台01
  9. Exchange端口列表
  10. 关于[一个基于WF的业务流程平台]表设计的说明
  11. 备份Linux系统的数据到坚果云
  12. GB18030:蒙文字符方向为什么转了90度
  13. android 4k 测试图片,4K高清图片视频测试
  14. 代码检查、评审、单元测试工具 大搜集
  15. 不删除磁盘内容,如何给C盘扩容
  16. BoardCast广播组件
  17. MySQL数据库——数据库逻辑结构设计阶段(非常重要)
  18. 给准备第一次参加西雅图峰会的MVP们:签证篇(B1签证)
  19. 【Python】Conway生命游戏学习
  20. ARM常用重要的寄存器及指令解释 和 指令英文全称

热门文章

  1. 写一段js代码 生成心形动画,动画路径内部填充渐变色
  2. Unreal和Unity
  3. 【日历推】苹果相册推APNSDistributions以及证书在AppID设置装备安排中建立布局构筑ArrayList tmpMacList
  4. php yaf 2.3.5,Yaf 3.2.0发布
  5. Vue2 computed中的setter
  6. 亚马逊Kindle入华:狼来了的故事只是传说
  7. Confluence 6 设置其他页面为你空间的主页
  8. Linux下压缩某个文件夹命令
  9. 公众号运营小编自制gif动图的方法
  10. php代码实现微信代扣,PHP开发微信支付的代码分享