- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DDD领域驱动设计
DDD领域驱动设计
1. 领域驱动设计
1.1 领域驱动概述
领域驱动设计(Domain Driven Design) 是⼀种从系统分析到 件建模的⼀套⽅法论。以领域为核⼼驱动⼒的设计体系。
为什么使⽤领域驱动设计
1.⾯向对象设计,数据⾏为绑定,告别贫⾎模型。
2.优先考虑领域模型,⽽不是切割数据和⾏为。
3.准确传达业务规则。
4.代码即设计。
5.它通过边界划分将复杂业务领域简单化,帮我们设计出清晰的领域和应⽤边界,可以很容易地实现业务和技术统⼀的架构演进。
领域驱动设计,⼜称 件核⼼复杂性应对之道。是⼀套基于对象思维的业务建模设计思想,相对于 CRUD 系统有更⾼的灵活性,是业务
⼈员处理复杂问题的有效⼿段。
1.2 领域驱动优点
DDD最⼤的好处是 :接触到需求第⼀步就是考虑领域模型,⽽不是将其切割成数据和⾏为,然后数据⽤数据库实现,⾏为使⽤服务实现,最
后造成需求的⾸肢分离。DDD让你⾸先考虑的是业务语⾔,⽽不是数据。DDD强调业务抽象和⾯向对象编程,⽽不是过程式业务逻辑实
现。重点不同导致编程世界观不同。
1.⾯向对象
封装 :Account的相关操作都封装在Account Entity上,提⾼了内聚性和可重⽤性。
多态 :采⽤策略模式的OverdraftPolicy (多态的典型应⽤)提⾼了代码的可扩展性。
2.业务语义显性化
通⽤语⾔ : “⼀个团队,⼀种语⾔”,将模型作为语⾔的⽀柱。确保团队在内部的所有交流中,代码中,画图,写东西,特别是讲话的时候
都要使⽤这种语⾔。例如账号,转账,透⽀策略,这些都是⾮常重要的领域概念,如果这些命名都和我们 ⽇常讨论以及PRD中的描述保持⼀
致,将会极⼤提升代码的可读性,减少认知成本。说到这,稍微吐槽⼀下我们有些⼯程师的英语⽔平,有些神翻译让⼀些核⼼领域概念变得
⾯⽬全⾮。
显性化 :就是将隐式的业务逻辑从⼀推if-else⾥⾯抽取出来,⽤通⽤语⾔去命名、去写代码、去扩展,让其变成显⽰概念,⽐如透⽀策
略这个重要的业务概念,按照事务脚本的写法,其含义完全淹没在代码逻辑中没有突显出来,看代码的⼈ ⾃然也是⼀脸懵逼,⽽领域模型
⾥⾯将其⽤策略模式抽象出来,不仅提⾼了代码的可读性,可扩展性也好了很多。
1.3 DDD解决复杂度的⽅式
⾸先, 典型的DDD实现了业务复杂度和技术复杂度的隔离,通过分层架构隔离了关注点,举个例⼦,在传统的DDD四层架构中,DDD划分
出了领域层、仓储层、基础设施层、接⼝层 ;
在领域层中,存放业务逻辑的关注点,即所谓的领域⾏为 ;在应⽤层中,DDD暴露出了 业务⽤例级别 (Use Case)的服务接⼝,粘合业
务逻辑与技术实现 ;在基础设施层中,DDD集中放置了⽀撑业务逻辑的技术实现,如 :MQ消息发送、对缓存的操作等 ;在仓储层中,DDD
放置了和领域状态相关的逻辑,打通了领域状态持久化与存储设施之间的联系。
除了划分不同分层外,DDD还提出了⼀个建设性的概念: “限界上下⽂ (Bounded Context)”,通过限界上下⽂对业务流程分⽽治之,
切分为不同的⼦系统,在每个⼦系统中利⽤DDD的分层架构/六边形架构等思想分别进⾏逻辑分层。通过这样的分治之后,DDD帮我们将业
务复杂度隔离到了每个细分的领域内部,⽽且DDD本⾝的分治思想,也帮助我们隔离了业务需求和技术需求的关注点。
这是⼀个典型的领域驱动设计分层架构,蓝⾊区域的内容与业务逻辑有关,⽽灰⾊区域的内容则与技术实现有关。这⼆者泾渭分明,最后汇
合在应⽤层。
应⽤层确定了业务逻辑与技术实现的边界,通过直接依赖或者依赖注⼊ (DI,Dependency Inj ection)的⽅式将⼆者结合起来。充分体现
了DDD能够隔离技术复杂度与业务复杂度的特点。
2. 领域核⼼知识体系
2.1 领域知识概念
DDD的核⼼知识体系主要包括领域、⼦域、核⼼域、⽀撑域、通⽤域、限界上下⽂、实体、值对象、聚合、聚合根等概念。
2.2 领域战略战术设计
DDD有战略设计和战术设计之分。战略设计主要从⾼层俯视我们的 件系统,帮助我们精准地划分领域以及处理各个领域之间的关系 ;⽽
战术设计则从技术实现的层⾯教会我们如何具体地实施DDD。
战略建模-Strategic Modeling
限界上下⽂ (Bounded Context)
上下⽂映射图 (Context Mapping)
战术建模-Tactical Modeling:
聚合-Aggregate
您可能关注的文档
- 2022年工地疫情防控应急预案.docx
- 2022年记事日历(一月一张-A4纸直接打印版).doc
- 2022年人教版八年级数学下册期中试题.docx
- 2022年沼气发展现状及市场前景分析.docx
- A5-技术支持的课堂导入-问题描述-课堂导入设计-课堂导入片段--初中数学课堂导入.docx
- BearStearns为何盛极而衰.doc
- COMSOL-4.4-模拟螺线管线圈产生的磁场分布.docx
- CT设备的验收与检测.docx
- C语言老鼠走迷宫(单路径)算法详细讲解.pdf
- Edgar-Allan-Po讲义e-爱伦坡简介-PPT课件.ppt
- 小学语文课堂思维导图的应用研究教学研究课题报告.docx
- 小学生批判性思维培养的教学策略研究教学研究课题报告.docx
- 2024-2025学年小学科学五年级下册青岛版(六三制2024)教学设计合集.docx
- 国际视野下的教师专业发展路径研究教学研究课题报告.docx
- 教师培训形式及其有效性的实践研究教学研究课题报告.docx
- 基于证据的高中物理学习改进策略探讨教学研究课题报告.docx
- 高中化学实验安全意识培养的综合研究教学研究课题报告.docx
- 职业中学生涯规划中职业信息获取方式教学研究课题报告.docx
- 初中美术教育与ThinkerSkills的结合教学研究课题报告.docx
- 高中思想政治课创新教学方法探讨教学研究课题报告.docx
文档评论(0)