本文目录
什么是领域驱动设计
领域驱动设计(DDD):DDD的全称为Domain-driven Design,是一套综合软件系统分析和设计的面向对象建模方法,是针对复杂系统设计的一套软件工程方法,是一种思想。
什么是领域:领域是问题域 + 业务期望
一:问题域:领域中有许多的问题域,领域是有边界的,要注重核心要解决的问题,问题域建模的过程就是业务领域分析的过程
二:业务期望:确定业务的期望与愿景,业务的范围,识别出业务需求的价值,识别出最核心的业务
什么是驱动:
一:领域驱动领域模型设计,需求分析 =>领域模型 ,领域模型驱动代码实现,领域模型 =>代码实现 ,分析领域中的核心问题(核心关注点),然后设计对应的领域模型,再通过领域模型驱动代码实现。
什么是设计:
一:DDD中的设计主要指领域模型的设计,DDD是一种基于模型驱动开发的软件开发思想,强调领域模型是整个系统的核心,领域模型也是整个系统的核心价值所在
二:领域的设计分为2阶段:
1.领域驱动领域模型设计,需求分析 =>领域模型 =>战略设计,根据业务设计领域模型,领域模型是整个系统的核心,领域模型要反映业务需求
2.领域模型驱动代码实现,领域模型 =>代码实现 =>战术设计,代码实现要严格按照领域模型的意图来落地
为什么要使用领域驱动设计
一:不同于传统以数据表为中心的建模方式,它以业务领域为中心来建模,迭代过程中,不断重构完善设计,更好的面对业务的挑战与变化
二:领域驱动设计是一套完整而系统的设计方法,它能带给你从战略设计到战术设计的规范过程,使得你的设计思路能够更加清晰,设计过程更加规范
三:是一种基于模型驱动的软件设计方式。它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题,模型反映业务,识别业务的边界,价值,控制业务的复杂度,业务越复杂的场景使用DDD,价值越大
四:对提高软件的可维护性,业务可理解性以及可重用性方面都有很好的帮助,可以提高团队成员的面向对象设计能力与架构设计能力,提高沟通协作能力
五:领域模型贯穿软件分析、设计,以及开发的整个过程;领域专家、设计人员、开发人员通过领域模型进行交流,彼此共享知识与信息,防止需求走样
六:领域模型是整个软件的核心,是软件中最有价值和最具竞争力的部分,设计足够精良且符合业务需求的领域模型能够更快速的响应需求变化
七:一种开发思想的转变,让开发人员不止关注技术领域,还要关注业务领域,团队协作沟通
通用语言
在开发的过程中领域专家、设计人员、开发人员需要一起交流沟通,来了解业务分析需求,建立领域模型,由于我们每个人掌握的领域知识不一样,思考的方式不一样,每个人都有自己的看法,不建立通用的语言,很难沟通,达成共识,会造成像盲人摸象一样,加大沟通的成本,业务也会有偏差,建立通用语言,基于通用语言交流沟通,让团队人员达成共识,提升沟通的效率
一:发现领域内的概念,术语,形成术语表,给出英文术语,专有概念(专门为软件开发而提炼出的概念)基于统一语言进行交流,沟通
二:领域驱动设计的一个核心的原则是使用一种基于模型的语言,通用语言反应业务的概念与行为
三:基于统一语言沟通交流,必须保证术语概念的一致性,及时更新维护,达成共识,减少沟通的成本
四:领域行为是对业务过程的描述,基于领域术语描述业务场景用例,它体现了更加完整的业务需求以及复杂的业务规则
五:在同一个限界上下文中必须保证统一语言的唯一性
六:获得统一语言就是需求分析的过程,也是团队中各个角色就系统目标、范围与具体功能达成一致的过程
七:实现代码时,项目的类名,方法名,仓储,界限上下文,接口等,都应该使用通用语言的英文术语来命名
资料的来源
想要从头开始学习DDD,DDD中有许多难懂的概念,只看博客,视频,很难理解,至少我觉得有难度,在实际开发中去理解,这样会事半功倍,收集资料,先了解DDD的基础知识,慢慢的学会自己思考,我希望自己能坚持下去。
感谢前辈们的付出,才让我们学习起来更容易一点,谢谢!
汤总netfocus的DDD系列的博客,非常的全面透彻,学习DDD必读: https://www.cnblogs.com/netfocus/category/361987.html
dax.net:https://sunnycoding.cn/
张逸老师:GitChat 领域驱动设计实战书籍
解道JDON:https://www.jdon.com/ddd.html
田园的蟋蟀:https://www.cnblogs.com/xishuai/category/572887.html