搭建中台缺少方法论或者实践?

系统开发者最终的实现与产品设计常常出现偏差?

系统开发者带着产品在跑设计?

每个开发者对业务理解不同,实现不同,在人员交替的时候代码逻辑分支太多?

项目干系人沟通缺少共同的语义,理解不一致?

那期待您共同参与到MDD架构实践

**

一 尼式三原则

**

  1. 唯一原则

所有业务围绕核心业务展开,并且核心业务是唯一的。如果核心业务不唯一,业务所在的系统需要进行拆分,直至唯一,拆分后的每个子系统存在仅存在唯一的核心业务流。

  1. 隔断原则

核心业务代码的组成单位是模块。隔断性表现在垂直隔断和水平隔断。

一核心业务主要基于模块而非其他业务或者更基础的业务单元代码;

二模块是业务隔断的,模块的边界与业务划分不重合甚至是业务近似无关的,如果在概念上可以抽象成业务无关名词,其实更合适。

  1. 串连原则

模块之间唯一的关系是抽象模型。隔断原则使业务代码依赖的模块散落乃至没有业务意义,如何串联呢?或者如何使得模块的编排和组合实现核心的业务逻辑呢,答案就是抽象模型。

通过场景串联使得模块成为抽象模型的模块。

**

二 3V 模型

**

                                         3V 模型

3V 模型描述了三个原则在每个阶段的适用场景。

第一步 系统整体建设阶段,使用核心原则抽取出业务核心,初步划分系统。拆分出核心系统。核心系统对应的核心业务流进行抽象,形成多个独立的抽象模块,结合场景进行模块的场景串连,主要串连主业务场景,考虑周边场景的合理性最终形成抽象模型。该阶段的反弹,最终的抽象模型会反馈至模块,模块需要进一步拆分或者聚合。使用反弹阶段的模块产物来组织周边系统的建设。这个阶段是系统的递归分析;

第二步 系统内部建设阶段,使用核心原则抽取出关键的领域核心,在第一阶段生成的模块产物需要和领域进行关联,这种关联性是领域中模型基本属性的关联,非业务性强关联。该阶段的底部及使用关联了基本属性的模型进行领域模型生命周期的串连。这个阶段是子系统的递归实现。

第三步 功能完成建设阶段,以第二阶段生成的模块产物为基本代码组织核心的功能,需要补充逐渐增强的业务逻辑代码,主要是在粘合模块产物而非重新定义逻辑。检验的标准是可以串连完整的业务功能。这个阶段是功能的递归实现。

三个步骤中落实“尼式三原则“,在两个不同维度(系统间和系统内)进行递归式分析和实现,最终收敛于模块,理想的状态就是业务逻辑的模块化,这与隔离原则契合,使得整个系统业务逻辑模块化取代模块代码是业务的,零散的。

                                      九点图

九点图描述了层级依赖的关系,依赖的关系在3V模型中有已体现。模型层是抽象模型和模型模块的整合层。领域层是与DDD实践时的层次结构。业务层也是一般的应用层概念。

隔断原则维护了模块的高内聚,模块需满足开闭原则,保持对扩展的开放;串连原则保证了低耦合,使得业务模型和抽象模型是唯一映射的关系,而非模块或者具体的业务代码,这也是唯一原则的另一层面体现。

非核心业务代码可以满足隔断原则,也可以不满足。从核心业务到非核心业务,从核心模块到非核心模块可能存在隔离性的衰减。

再总结一下唯一原则,一个系统对应一个核心业务流,也对应一个完整的抽象模型。以上原则可以做到在围绕核心业务,做到似断非断,在该断的时候断,不该断的时候相连。

**

三 职能划分

**

                                                 九点半图

抽象模型是开发与产品之间的沟通语言,也限定了项目干系人沟通的共同语义。通过抽象模型保持项目组内的理解的统一性,在达成一致后,该层是最稳定的。模型模块是不能职能的开发人员的沟通语言和工作关联。业务逻辑基于模块的组合编排,灵活性最高。

当业务需求变化时,

业务需求变化影响范围 参与人员
影响到业务逻辑变化 产品+具体实现人员
影响到模型模块 +技术负责
影响到抽象模型时 +架构师

当需求变化影响到抽象模型时需要架构师的配合,如变化范围较大,需要重新规划版本。项目的干系人职能约定在以上范围内,层层保证业务设计与技术实现的匹配。

**

四 MDD 与 DDD 的关系与不同

**

相同:MDD 是DDD 设计方法的延申,特别是DCI 架构的接近,M是C的替代和演进。领域模型是领域驱动设计的核心,而在MDD中,Modeling(Module) 是设计的核心。这种改进解决了贫血模型和富血模型的冲突,同时支持DDD的三分层结构和传统的四层代码分层结构。

不同:MDD 提供原则和方法论的描述,可以与DDD 的相融相生,也可以指导传统的架构设计方法。

**

五 交流

**
如果实践成功,欢迎交流;如果发现掣肘,欢迎拍砖。

MDD 建模驱动设计相关推荐

  1. 领域驱动设计——MDD

    一.MDD 在领域驱动设计中,最重要的就是Model Driven Development,模型驱动开发(MDD).在编程领域有一句名言"依赖于抽象而不是依赖于具体".这既是设计的 ...

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

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

  3. 领域驱动设计和业务建模的最佳实现模式

    图片来源:pexels.com 做了这么多年项目,不知道你有没有发现一个有趣的现象:有时候面对同一个问题,当我们对它的定义不同,往往最终解决方案的差异也会非常大. 拿我司之前的一个需求来说,客户要求将 ...

  4. 领域驱动设计 -- 领域驱动建模与面向对象建模的差异(一)

    前阵子我们基于DDD的方式对产品中台的业务进行了重构,经过这些天水与火的煎熬后,我从实战的事件讲一讲我对DDD的理解以领域驱动建模与面向对象建模的区别.本质上来讲DDD与面向对象的本质区别在于DDD是 ...

  5. 领域驱动设计--领域驱动设计到数据建模实践(十)

    ----- 学习笔记 ----- 过去,系统的软件设计是以数据库设计为核心,当需求确定下来以后,团队首先开始进行数据库设计.因为数据库是各个模块唯一的接口,当整个团队将数据库设计确定下来以后,就可以按 ...

  6. 领域驱动设计DDD之读书笔记

    查看文章   领域驱动设计DDD之读书笔记  转载原地址:http://hi.baidu.com/lijiangzj 2007-08-17 16:53 一.当前Java软件开发中几种认识误区 Hibe ...

  7. DDD领域驱动设计之聚合、实体、值对象

    关于具体需求,请看前面的博文:DDD领域驱动设计实践篇之如何提取模型,下面是具体的实体.聚合.值对象的代码,不想多说什么是实体.聚合等概念,相信理论的东西大家已经知晓了.本人对DDD表示好奇,没有在真 ...

  8. 一文理解 DDD 领域驱动设计!

    来源丨SpringForAll社区 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Softwa ...

  9. 浅谈我对DDD领域驱动设计的理解

    从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...

最新文章

  1. SCheckbox_Struts2标签之Checkbox详解
  2. 自定义导航栏,实现缓存,更新缓存,提高效率
  3. 福特数据总监:汽车业的大数据框架如何构建?
  4. Python入门100题 | 第014题
  5. Dojo 如何测试 widget
  6. 单片机8×8点阵显示简单汉字的程序_LED显示屏的显示原理原来是这样,科技实现梦想...
  7. 四足爬行机器人运动_有自我意识机器人横空出世,还能自我复制,专家表示需警惕其失控...
  8. Chapter2-1_Voice Conversion(Feature Disentangle)
  9. oracle 10.2.0.1 升级 10.2.0.5,Oracle10.2.0.1RAC 升级 Oracle10.2.0.5案例分享 -DATABASE篇
  10. 北航出品,CVPR 安全AI大赛第二名:梯度细化提高对抗传递性
  11. 在没有密码提示的情况下在Ubuntu上安装MySQL
  12. Windows 2008下Exchange Server部署攻略
  13. Remix-IDE(一)
  14. 爬虫学习笔记1——爬取糗百段子
  15. 万圣节| Huluween“魔幻洞窟”闯关之夜
  16. python公开直播课_今晚Python与人工智能直播课来袭,Mars喊你快上车
  17. python关于类和对象说法正确的是_关于类和对象的关系,下列描述正确的是()。
  18. Egret引擎制作旅行青蛙
  19. php GD库的使用
  20. cesium空间面积测量,取点比较准,数据不是很准,但是差不太多

热门文章

  1. Qt Creator 添加基于 JSON 的向导
  2. GSM模块的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  3. 计算机网络 同步传输和异步传输(理解)
  4. 【IAP】新建虚拟产品、新建测试帐号、获取产品列表、向自己的服务器生成订单、发送购买请求、服务端数据安全
  5. Java基础总结(初学者)
  6. 讲中国故事的博主正在变多,李子柒为什么不可复制?
  7. ubuntu16.04安装skype
  8. 请求头是针对服务器_什么是无头服务器?
  9. 上岸滴滴暑期实习总结
  10. algodoo是什么意思_algodoo在中学物理教学中的应用 (1)