【DDD】领域驱动设计是什么?

  • Post author:
  • Post category:其他


最近几年,微服务的设计思想,架构方案非常流行,能够很大程度上保证我们的高性能和高可用,可是微服务设计过程中往往会面临边界如何划定的问题 ,这个时候就需要一种理论指导,这时候来自2004年 埃里克・埃文斯(Eric Evans)的

领域驱动设计

理论能够帮助我们更好的进行







,也是微服务架构实践中非常核心的一部分。

​ 本着深入理解的态度,本文章要作为一个专栏来进行编写,作为2020年开篇的文章,我觉得DDD是我非常感兴趣设计思想,希望能够帮助大家,更好的理解DDD,并在项目中用好DDD。



什么是领域驱动设计

我们援引wiki上的英文释义:

Domain-driven design

(

DDD

) is an approach to software development for complex needs by connecting the implementation to an evolving model.


DDD是一种通过把设计实现与不断修正发展的模型紧密关联起来,来应对复杂需求的一种软件开发思路。

领域驱动设计的前提是:

  • 把项目的主要重点放在核心领域(core domain)和领域逻辑
  • 把复杂的设计放在限界上下文(bounded context)的模型上
  • 发起一个技术团队和领域专家合作的模式,以迭代的方式,解决特定领域的问题

如果觉得

应对复杂需求的一种软件开发思路

这句话比较难理解,我们可以来简单看一下架构的演进。



架构模式的演进

​ 架构是在不断演进的,一般情况下会经历到从单体模式 、集中式到分布式微服务架构三个阶段的演进。随着互联网公司的发展,分布式技术的越来越成熟,我们已经进入到了微服务架构的时代。

在这里插入图片描述

在这里插入图片描述


一般传统的开发都是单体架构 :

采用面向过程的设计方法,系统包括客户端 UI 层和数据库两层,采用 C/S 架构模式,整个系统围绕数据库驱动设计和开发,并且总是从设计数据库和字段开始。


转向微服务设计架构:

随着微服务架构理念的提出,包括一些开源架构对分布式技术的支持。微服务的这种架构风格,迅速受到了企业和技术人员的推崇,微服务架构可以很好地实现应用之间的解耦,解决由于单体应用导致的扩展性和弹性伸缩能力不足的问题。 配合一些比较流行的虚拟化技术,能够实现妙级别的镜像拉起,极大地增强了应用的的弹性伸缩能力。



为什么需要DDD

DDD 是一种处理高度复杂领域的设计思想,它试图分离技术实现的复杂性,并围绕业务概念构建领域模型来控制业务的复杂性,以解决软件难以理解,难以演进的问题。



DDD 不是架构,而是一种架构设计方法论

,它通过边界划分将复杂业务领域简单化,帮我们设计出清晰的领域和应用边界,可以很容易地实现架构演进。




DDD核心设计方法是什么



战略设计:

说到战略设计,我们要站在一个比较高的视角来看待这个问题,战略设计要解决的就是某个领域的问题,所以战略设计时,我们要构建好领域模型,保证我们的大方向是不会错的

战略设计主要从

业务

视角出发,建立

业务领域模型



划分领域边界



建立通用语言的限界上下文

,限界上下文可以作为微服务设计的参考边界。



战术设计 :

战术设计则是要求我们从业务模型转向微服务落地 我们会将领域模型中的领域对象与代码模型中的代码对象建立映射关系,将业务架构和系统架构进行绑定。当我们去响应业务变化调整业务架构和领域模型时,系统架构也会同时发生调整,并同步建立新的映射关系。 也有演进式架构的含义在里面。

说到这里,大家可能对DDD有了一个粗略的,大体的认识,我们可以理解到,DDD能够帮助我们更好的在微服务的架构中进行合理的拆分,由于DDD要求我们建立标准的业务领域模型,所以DDD也能够很好地帮助我们设计企业的中台,DDD是一把利器,帮助我们解决架构中遇到的问题和挑战。



版权声明:本文为qq_34370153原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。