四色原型

在企业应用的上下文中,四色原型是领域模型的一种原型,原型的意思是指领域中的任何模型及其关系都可以抽象为“四色原型”。

四色原型可以用这句话进行描述:某个人(Party)的角色(PartyRole)在某个地点(Place)的角色(PlaceRole)用某个东西(Thing)的角色(ThingRole)做了某件事情(MomentInterval)。

图片示意

名词解释

  • PartPlaceThing:简称PPT,用淡绿色表示,常见的PPT有:部门、岗位、人员、地点、物品等。
  • Description:简称Des,用淡蓝色表示,主要用来对PPT进行描述,常见的Des有:部门类型、岗位层级、人员类型、地点区域、物品分类等。
  • Role:用淡黄色表示,主要表示PPT在某个场景下扮演的角色,常见的角色有:财务类部门、管理类岗位、请假者、销售点、产品等。
  • MomentInterval:简称MI,用淡红色表示,主要表示在一刻或一段时间内发生的一件事情,常见的MI有:部门移动、岗位移动、员工离职、产品销售等。
  • MomentInteval:简称MIDetail,用淡红色表示,主要表示MI的明细,常见的MIDetail有销售明细、入库明细、出库明细等。

出差管理示例

根据四色原型进行聚合设计(四步曲)

第一步:识别模型

根据四色原型很容易识别出领域模型(见上图)。

第二步:识别关联

根据四色原型同样很容易识别出领域模型之间的关系(见上图)。

第三步:划分聚合

  • MI和MIDetail是一个聚合,MI是聚合根。
  • PPT是一个聚合,PPT是一个聚合根。如果Des只“描述”PPT,那么这个Des会作为一个值对象隶属于属于PPT所在的聚合。
  • Des是一个聚合,Des是一个聚合根。前提你想“跟踪”Des关联的PPT。
  • Role不属于聚合,Role是一个带状态的领域服务,Role采用装饰器模式装饰PPT。

划分结果

第四步:精简关联

  • 去掉MI和Role之间的关联,改为仓储查询,根据需要让MI关联一个Role的快照(发生时刻Role的状态)。将关联改为仓储查询的理由是这样更加灵活,一个请假人有1W个请假单,没有必要设置这样的关联。让MI关联一个Role的快照的理由是MI很多情况要记录下发生时刻Role的状态,如:出差单要记录下发生时刻请假人的组织信息,而不是现在的组织信息。
  • PPT和DES之间的关联可以根据自己的爱好酌情保留,我喜欢用仓储查询,这样更灵活。
  • 去掉PPT和Role之间的关联,改为仓储查询。比如:用仓储查出PPT,然后将这个PPT实例注入到Role中。

精简结果

为什么销售单和销售单明细是一个聚合,而文章和评论不是一个聚合呢?

因为销售单是MI,销售单明细是MIDetail,因此他们是一个聚合;而文章是MI,评论也是MI,所以他们不是一个聚合。

备注

四色原型可以帮助我们做聚合设计,我相当于把聚合设计问题踢给四色原型分析了,本文还没有详细讨论如何识别领域中的四色原型。当然了,聚合设计还有其他规律可循,后面慢慢讨论吧。时间有限,后面我会用HappyFramework写个Demo。

今天还没有过多的谈“职责分配”的问题,四色原型可以完美的补充DDD关于职责分配的各种模式,我会放到下一个主题讨论。

转载于:https://www.cnblogs.com/happyframework/archive/2013/04/26/3043515.html

DDD:用 “四色原型” 进行 “聚合设计”相关推荐

  1. DDD:四色原型、DDD、DCI之间的关系

    PPT对应某个聚合. Des对应某个聚合或其它聚合内的实体或值对象. MI对应某个聚合. Role对应PPT(Data)在某个上下文(Context)执行某些交互(Interactive)的代理或装饰 ...

  2. DDD领域驱动设计---战略设计(包括四色原型建模)

          相当于策略设计,从宏观角度着眼于领域的分析设计,属于系统分析阶段,注重如何从有界上下文中寻找领域模型,战略模式由有界上下文.无所不在的语言和上下文映射组成. 在战略设计前首先要了解下领域知 ...

  3. 四色原型的学习心得分享

    在讨论四色原型之前,我想先狗胆讨论下什么是我所认识的"世界"? 我觉得世界由物质及其相互作用组成."物质"是不以人的意识为转移的客观存在:而"相互作用 ...

  4. 四色原型(转自banq大师)

    我们搞技术的有很多误区,比如经常陷入纯技术钻牛角尖的争辩,而全然不顾业务场景,技术活做太多,经验一箩筐,但是有时会疑惑,这些经验是否适合其他自己没有经历过的新系统呢?我们在技术设计路线上走得太久,容易 ...

  5. 四色原型图进行业务建模的思考

    一般的需求,我们利用用例图就可以表达清楚了,如果再复杂些,我们可能还得再配合序列图.状态图等加于说明.但是,在非常复杂的业务逻辑中,怎么样才能找出它们的联系?而且还能更好地拥抱OO(面向对象),OO的 ...

  6. 领域驱动设计(DDD)实践之路(三):如何设计聚合

    本文首发于 vivo互联网技术 微信公众号  链接:https://mp.weixin.qq.com/s/oAD25H0UKH4zujxFDRXu9Q 作者:wenbo zhang [领域驱动设计实践 ...

  7. 四色建模法 模型分析和设计

    四色建模法共有四个概念: 一.时标性对象 - 时刻时段原型 1.业务在时间轴上发生的需要跟踪的事件留下的痕迹 概念为:跟踪实体对方发生的所有需要跟踪的事项 通常生命周期比较短.如:订单等. 2.图例用 ...

  8. 【领域驱动设计】四色建模法

    一.参考资料 实例! 领域驱动四色建模法分析需求 - 知乎 运用四色建模法进行领域分析 - 简书 代码精进之路:从码农到工匠-张建飞-微信读书

  9. ddd 企业应用架构模式_灵魂拷问:用了DDD分包就是落地了领域驱动设计吗?谈谈DDD本质...

    学习DDD的时候,作为开发,我们更关心它在技术层面的东西,尤其体现在DDD的分包方式.编码技巧等方面. 自然的,我们不禁发问,用了DDD的分包,就是实践落地了DDD了么? 不卖关子,直接说答案,并不是 ...

最新文章

  1. 开发你的第一个 Android 应用
  2. VC/MFC Tips
  3. 【深度学习入门到精通系列】关于梯度下降和反向传播的探索
  4. 【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )
  5. Document Builder: 如何将structure level的field加入到word document的table中
  6. 【bzoj1572】[Usaco2009 Open]工作安排Job 贪心+堆
  7. java内部类的作用_java 内部类的好处和缺点(上)
  8. Silverlight toolkit 中ListPicker控件的用法【转】
  9. elasticsearch同义词配置elasticsearch-analysis-dynamic-synonym
  10. Atitit zip解压文件 java use apache ant.jar C:\0wkspc\hislog\src\main\java\com\attilax\compress\ZipUt
  11. html5 职工入职后台管理系统_丽水微信社群裂变营销管理系统公司
  12. C#项目获取当前时间的农历时间
  13. 5G的主要业务场景:eMBB、URLLC、mMTC
  14. 群消息已读回执(这个屌),究竟是推还是拉?
  15. WiFi共享精灵的文件共享
  16. 推荐几个好玩的网页和软件
  17. 树莓派3B+控制LCD1602显示英文或数字
  18. systemverilog学习 semaphore 和 mailbox
  19. CCNA培训结束后的感想
  20. 焊XT60需要注意电烙铁加热时间长了容易塑料融化里面的头变歪,导致无法插入其他头里面。

热门文章

  1. 一些不是很常用的SQL语句
  2. linux7虚拟机修改主机名,centos 7 更改网卡名,主机名,虚拟机添加网卡
  3. vaspkit使用_VASPKIT校正气体分子自由能
  4. 什么是拉电流和灌电流?
  5. Python-opencv实现视频与图片的相互转换
  6. centos6.8下安装pythondjango
  7. #x开头的是什么编码呢。浏览器可以解释它。如中国等同与中文中国?
  8. CSS3的边框(border)属性-radius
  9. [转]图解APP的商业模式
  10. 【总结】IE6,IE7,IE8,Firefox兼容的css hack 补充!