DDD专栏4:DDD如何保护领域模型
04、DDD如何保护领域模型
上一讲中,我们已经提到了领域服务、实体和值对象的重要性,基于这些基础对象,就能够形成一个基础的领域模型。我们对这个领域模型进行一些贫血模型和充血模型的设计,就能搭建出一套基于领域模型设计的应用架构。这种应用架构由于功能相对内敛,所以很容易设计出“高内聚,低耦合”的高质量应用。但是设计出这样的基础领域模型其实还只是第一步,在后续领域模型具体落地的过程中,以及后续的业务需求迭代过程中,如何保护领域模型不退化,依然有很多问题需要解决。而这些问题,光靠领域模型本身是远远不够的,还需要有其他的武器,来帮助保护领域模型的稳定性。这时,就轮到聚合、仓库和工厂出场了。
聚合与聚合根
聚合
之前已经提到过,在DDD中,实体和值对象是最为基础的领域对象。实体一般对应业务对象,他具有业务属性和业务行为;而值对象主要是属性集合,对实体的状态和特征进行描述。但是,实体和值对象都是只个体化的对象,他们的行为表现出来的更多的是个体的能力。而如果需要让这些个体协同工作,那就还需要聚合(Aggregator)。例如在我们上一章节讨论的转账过程,单个账户的余额变动,体现的就是这种个体的业务能力。而用户扣减余额和商户增加余额这两个操作一起,才构成了转账这么一个业务。
聚合是用来确保这些领域对象在实现共同的业务逻辑时,能保证数据的一致性。 具体到业务中,他表达的就是真实业务中的整体与部分的关系。比如发票与发票明细、商品与商品描述等。这些关系在数据库中,可能是分散在不同的表中,而在设计领域实体时,也会设计成不同的实体。但是
DDD专栏4:DDD如何保护领域模型相关推荐
- DDD专栏12、专栏总结 走出自己的DDD
本专栏到这里,也就进入了尾声.实际上,DDD从2004年就被提出,多年来经过很多大神的研究与分享,DDD已经从高高在上的理论空间慢慢沉淀到了我们身边.业界对于DDD的难点,也从学习理解,下沉到了落 ...
- DDD理论学习系列(4)-- 领域模型
1.引言 我们还是先来拆词理解,领域模型可以拆为"领域"和"模型"二词. 领域:按照我们之前的文章的理解,DDD中的领域是指软件系统要解决的问题,如我们的办公设 ...
- DDD专栏1:DDD vs DDD : 怎么防止系统变“老“?
01-DDD vs DDD : 怎么防止系统变"老"? 关于DDD,之前已经简单做过介绍,即Domain Driven Design.那这里怎么又多出了一个DDD呢?其实另一个 ...
- DDD领域模型、贫血模型、充血模型概念总结
DDD领域模型 领域模型是对领域内的概念类或现实世界中对象的可视化表示.又称概念模型.领域对象模型.分析对象模型.它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系. 业务 ...
- 领域模型DDD与聚合根
领域模型:聚合.聚合根详解 聚合和聚合根是领域模型里面很重要的一个概念,其实我们在从真实世界对业务对象进行识别和概念建模的时候,关注的就是聚合根,这才是我们真正要管理的业务对象.一个对象可能有多个层次 ...
- 京东平台研发:领域驱动设计(DDD)实践总结
点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...
- ddd领域驱动设计_领域驱动设计(DDD)理论启示
过去几年通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量.高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动.频道搭建和运营能力,主流程的新需求越来越少,个 ...
- MVC模式和DDD模式对比,谁才是银弹?
目录 MVC模式和DDD模式对比,谁才是银弹? 从DDD的角度看MVC架构的问题 第一层:初出茅庐 第二层:草船借箭(战术设计) 第三层:运筹帷幄(战略设计) DDD的不足 总结 MVC模式和DDD模 ...
- 京东研发团队 - 领域驱动设计(DDD)实践
过去几年,通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量.高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动.频道搭建和运营能力,主流程的新需求越来越少, ...
最新文章
- 信标组裁判系统原理与实现
- Adhesive框架系列文章--分布式组件客户端模块使用
- 程序猿小白应该注意什么
- Struts 2 标签库详解
- CS231n 学习笔记(4)——神经网络 part4 :BP算法与链式法则
- 早起5件事,让你年轻10岁
- 趣味Python入门(一):初识Python
- 从零开始——电子商务平台01
- Exchange端口列表
- 关于[一个基于WF的业务流程平台]表设计的说明
- 备份Linux系统的数据到坚果云
- GB18030:蒙文字符方向为什么转了90度
- android 4k 测试图片,4K高清图片视频测试
- 代码检查、评审、单元测试工具 大搜集
- 不删除磁盘内容,如何给C盘扩容
- BoardCast广播组件
- MySQL数据库——数据库逻辑结构设计阶段(非常重要)
- 给准备第一次参加西雅图峰会的MVP们:签证篇(B1签证)
- 【Python】Conway生命游戏学习
- ARM常用重要的寄存器及指令解释 和 指令英文全称
热门文章
- 写一段js代码 生成心形动画,动画路径内部填充渐变色
- Unreal和Unity
- 【日历推】苹果相册推APNSDistributions以及证书在AppID设置装备安排中建立布局构筑ArrayList tmpMacList
- php yaf 2.3.5,Yaf 3.2.0发布
- Vue2 computed中的setter
- 亚马逊Kindle入华:狼来了的故事只是传说
- Confluence 6 设置其他页面为你空间的主页
- Linux下压缩某个文件夹命令
- 公众号运营小编自制gif动图的方法
- php代码实现微信代扣,PHP开发微信支付的代码分享