软件行业隔一段时间大家就喜欢造一些名词,比如xx化,服务化,动态化,配置化等,你可以头脑风暴下,你可以搞出多少“化”来。比如最近火的都不是数据化,智能化了,而是什么“数智化”了,你说神奇不。

当然并不是所有的名词都向着贬义的方向演进,很多名词可以便于我们去理解一些新的概念,或是用不同的角度看待一个问题或者场景。相信我们总会有一些东西,感觉介于几个概念之间,但是有拿不准他应该属于哪里,比如就有今天讲的这几个。

DDD (Domain-Driven Design)和 DSL(Domain-Specific Language)、DCI(Data,Context, Interactive)的关系,很多人心存疑问。

DDD 概念作为一种软件开发的指导思想,为软件开发带来的好处主要有以下几点:

第一,最大好处就是所有参与者围绕一个统一的领域模型工作,传统的分析模型和设计模型不再割裂,不管是做设计、做分析还是写代码、写文档,脑海中所构建的画面都是一致的。

第二,DDD 是一个软件开发过程,它显式地把领域和设计放到了软件开发的核心,软件人员和业务人员受到同样的重视,他们合作来构建领域模型,使得软件的交付质量更高且维护成本更低;

第三,DDD 提出的分层架构,有效分离了业务复杂度和技术复杂度,凸显了领域模型,使得领域层的代码和领域模型保持高度一致;

第四,统一语言非常重要,每个概念在各自的上下文中是清晰的无歧义的,同时要控制领域模型的复杂度,于是 DDD 在战略上提出了分离子域(问题域空间)和拆分 BC(解决方案空间)的模式,BC 间通过 Context Mapping 来集成;

第五,DDD 在战术层面提出了很多模式(聚合、实体、值对象、服务、工厂、仓储),对领域模型中的元素进行了分类,并给出了每类元素在领域模型中的职责和特征,降低了领域模型的构建成本。

作为相近概念的DDD 和 DSL、DCI 之间存在一定的关联性。

DDD 和 DSL 的融合有三点,面向领域、模型的组装方式以及分层架构演进。DSL 可以看作是在领域模型之上的一层外壳,可以显著增强领域模型的能力。

主要有两个:

一是提升了开发人员的生产力,二是增进了开发人员与领域专家的沟通。

DSL 可以用于描述流程契约,友好且学习成本也很低(当然是在设计好的角度来说,设计的差的话,徒增压力)。

对于 DSL,需要自己实现一个解析器将 DSL 文法解析成语法树,再根据语法树生成语义模型。语义模型可以看作领域模型(严格的讲语义模型是领域模型的子集),外部 DSL 就是对领域模型的一种组装方式。

对于 DSL设计建议大家尽量参考业界主流解决方案,千万不要轻易尝鲜变成小白鼠。

DCI 可以助力 DDD 战术设计,如:

显式地对 ROLE 建模,解决了贫血模型与充血模型之争;

明确一个聚合可以支持哪些 ROLE、一个 ROLE 可以由哪些聚合扮演以及一个场景下哪些聚合要扮演哪些角色;

当 Aggregate 内部实体行为比较多时可以嵌套使用 DCI 来拆分和组合。

其次,DCI 助力 DDD 代码落地,如:

对象就是 Data,Client 为 Context,对象在 Client 中的行为就是 ROLE;

根据正交设计原则得到小类(素材库),根据多重继承或依赖注入来组合素材,不管是行为类还是数据类,都按 ROLE 的方式来组合,对像仅仅组合 ROLE 并注入依赖;

当然我也不建议团队过度尝试DDD的战术层面的事情,做好了如虎添翼,做不好自断手脚,早晚重构。

类作为一种模块化手段,遵循高内聚,低耦合的原则,让软件易于应对变化。

对象作为一种领域对象的直接映射,解决了过多的类带来的可理解性问题,让领域可以指导设计,设计真正反映领域。领域对象需要真正意义上的生命周期管理。

某种程度上DCI 对一些开发人员的影响可能比 DDD 和 DSL 还大,因为开发人员每天都在不断倒腾代码,想让代码的组合性更强,以便快速应对需求的变化。

其实不理解这些名词也不用着急,技术行业日新月异,技术名词不断更迭,很多时候换汤不换药,换了面子里子还是一样的。

我就不信了,写好代码还能跑得出“面向对象思想”这六个字的手掌心?

写代码没那么多修饰和装饰,主要体现的还是最朴素的道理,比如:

从DDD DSL DCI 说起相关推荐

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

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

  2. 你应该知道的五种IO模型

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 写在前面 linux操作系统包含了五种IO模型,各种上层编程语言或者网络编程框架的上层实现都是基于操作系统的这些IO实现来实 ...

  3. DCI架构是如何解决DDD战术建模缺点的?

    摘要:将DCI架构总结成一句话就是:领域对象(Object)在不同的场景(Context)中扮演(Cast)不同的角色(Role),角色之间通过交互(Interactive)来完成具体的业务逻辑. 本 ...

  4. DDD as Code:如何用代码诠释领域驱动设计?

    简介: 相较于常规的MVC架构,DDD更抽象.更难以理解,各个开发者对DDD的解释也不尽相同.那么哪种设计方式才更好?在学习时如何知道哪种DDD更正统,没有被别人带歪?本文尝试使用"DDD ...

  5. 领域驱动设计(DDD)理论与方法

    DDD由来与优势 软件架构设计的真正目的是解决软件复杂度带来的问题,软件复杂度由来主要由三方面:高并发场景下的对软件高性能要求.业务场景对软件高可用要求.持续变化的业务以及业务扩张和增加需求对软件扩展 ...

  6. 如何用 DDD 给 DDD 建模,破解 DDD 的魔法?

    "所有模型都不对,但总有一些是有用的." -- George Box DDD 全称是 Domain-Driven Design,而不是我们所擅长的 Deadline-Driven ...

  7. 我认为必须要学的前端技能和架构体系

    今天说说 项目延期 「 起因 」 这篇文章主要是面向小白用户和初中级前端,如果你有些基础,当然也建议你看看,尤其是最后一个主题,或许你能得到一些启发.本文的观点,纯属个人自以为是的想法,不是真理,仅供 ...

  8. 经验分享:如何系统学习 Web 前端技术?

    本文作者:曾亮.晟暄科技 CEO ,HTML5 & Node.js 技术讲师. Javascript前后端全栈开发人员 DDD/CQRS 设计师 对 Node.js 和 HTML5 有多年开发 ...

  9. 领域驱动设计理论与方法

    本文首发 微信公众号:码上观世界 作者:闻乃松 DDD由来与优势 软件架构设计的真正目的是解决软件复杂度带来的问题,软件复杂度由来主要由三方面:高并发场景下的对软件高性能要求.业务场景对软件高可用要求 ...

最新文章

  1. 权限表管理之获取用户权限表列表数据
  2. 车联网系统会不会只是智能手机系统的翻版?
  3. Java VS .Net 程序员的困惑 (转)
  4. 阅读笔记一——java高并发的性能优化
  5. Android之用jadx进行反编译
  6. VIM使用系统剪切板
  7. P1035 [NOIP2002 普及组] 级数求和(python3实现)
  8. html页面送值转换,在静态页面html中跳转传值
  9. python能做哪些方面的准备_学习pyhton需要做哪些准备工作
  10. mysql 去空格_MySQL基本命令操作
  11. chloe.mysql_Chloe.ORM框架应用实践
  12. 【OKR目标管理】价值分析
  13. All One Needs to Know about Metaverse
  14. jre包括jvm和java核心类库_JDK、JRE、JVM分别是什么及它们之间的有什么关联
  15. CVPR_2021_Fast-GANFIT: Generative Adversarial Networkfor High Fidelity 3D Face Reconstruction
  16. 新品密集!2020中关村论坛技术交易大会-第二场新技术新产品首发活动圆满举行...
  17. js的animate函数
  18. 小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数给出对应的提示信息
  19. P1823 [COI2007] Patrik 音乐会的等待(单调栈)
  20. 漫谈TCP拥塞控制算法(2)

热门文章

  1. 【数学专题】组合数学与计数
  2. AT2362 [AGC012B] Splatter Painting(思维、dfs染色、剪枝)
  3. 小H和游戏(无根树转有根树,思维)难度⭐⭐⭐★
  4. UVA1103 古代象形符号 Ancient Messages解题报告(DFS,字符串)难度⭐⭐⭐⭐
  5. c语言文件 加载内存吗,把文件中的数据加载到内存进行查找C语言实现.docx
  6. win10pin不可用进不去系统_华为鸿蒙系统来了!若安卓不可用,鸿蒙随时顶上!
  7. 10、Ktor学习-运行程序和基础架构;
  8. 数字签名和数字证书详解
  9. Codeforces 854 C Planning 贪心 最大堆
  10. 三大新闻机构起诉FBI,FBI与苹果大战续集开幕?