DDD领域驱动分层架构设计及业务场景实践.docx
《DDD领域驱动分层架构设计及业务场景实践.docx》由会员分享,可在线阅读,更多相关《DDD领域驱动分层架构设计及业务场景实践.docx(26页珍藏版)》请在优知文库上搜索。
1、1.DDD领域驱动设计基本概念理解1.1 什么是DDD领域驱动设计?领域驱动设计DDD(DomainDrivenDesign)是一种从系统分析到软件建模的设计思想和方法论,最早在2004年由EricEvans在著作Domain-DrivenDesign-TacklingComplexityintheHeartofSoftware中提出相应的概念.其核心思想是以领域为核心驱动力构建软件设计体系,并围绕业务概念抽象出领域模型,通过领域和边界划分将豆杂的业务模型抽象化、简单化,最终实现巨杂软件应用系统的拆解和封装.DDD不仅可以用于微服务设计,还可以很好地应用于企业中台的设计,也适用于传统的单体应用
2、。在DDD中分为战略设计和战术设计:战略设计:主要从业务视角出发,建立业务领域模型、划分领域边界、建立通用语言的限界上下文。在战略设计中,需要对领域进行全面的了解和分析,探究业务的规则和本质,以及领域未来的趋势发展和可能变化.战术设计:从技术视角出发,侧重于领域模型的技术实现完成软件开发和落地,包括:实体、值对象、聚合、工厂、仓而、领域服务、领域事件等代码逻娼的设计和实现。战术设计关注的是领域中的具体情境和场景,需要针对具体的问题进行具体的分析和设计,以满足业务需求.1.2 DDD领域驱动设计和微服务关系这些年随着软硬件技术的发展,软件设计架构也从最早的单机架构(BS/CS)、到集中式架构,再
3、到如今微服务(MicroServices)分布式架构.单机架构:采用面向过程的设计方法,系统包括应用客户端层和数据库层,整个系统围绕数据库驱动设计和开发.集中式架构:采用面向对象的设计方法,经典的三层架构包括业务接入层、业务逻辑层和数据访问层.这种集中式架构容易在某一层变得腌肿,另外受限于集中式的限制,可扩展性差,架构上不熨活。分布式微服务架构:微服务架构将应用程序拆分为一系列相互协作的微服务,每个微服务负责一个特定的业务领域或业务功能,从而实现应用之间的解耦,同时解决单体应用扩展性和灵活性问题.在微服务架构中,每个微服务都是独立的,可以使用不同的编程语言、数据存储和框架,这使得每个微服务可以
4、独立地演进和部署.DDD的概念最早在2004年就提出来之后一直不温不火直到微服务的概念出现.也可以说DDD的流行和微服务的发展有一定的关系.微服务的兴起使得越来越多的开发人员开始关注如何将应用程序划分成一系列相互协作的循服务,并且每个微服务需要实现自己的业务逻辑.在这个过程中,开发人员发现他们需要一种更好的方式来划分业务领域边界,建立正确的业务模型和通用语言,以便更好地实现微服务的独立性和可维护性.DDD正是一种能够帮助开发人员更好地设计和实现业务领域的模式,通过将业务领域作为核心,DDD可以帮助开发人员更好地理解业务需求,建立正确的业务模型和通用语言,从而更好地划分微服务边界,从而更好地实现
5、微服务的独立性和可维护性.1.3 DDD领域驱动设计中核心概念领域驱动设计DDD中的核心概念如下图所示,包括:战略设计:包括领域/子域、统一语言、限界上下文等概念战术设计:使用这些模式来捕获和传递领域中的概念、关系、规则代表领域的概念:如实体、值对敏、领域服务、领域事件等用于管理对演的生命周期:如聚合、工厂、费源库等用于集成或跟踪:领域事件、事件溯源等1.3.1 统一语言DDD中的统一语言(Ubiquitous1.anguage)是一种用于描述业务领域中的概念、规则和流程的语言,它是一种由领域专家、开发人员和用户共同理解的通用语言,而不是一种特定的编程语言或框架.统一语言贯穿于整个开发过程,从
6、需求分析到设计再到编码.它应该用于描述业务领域中的实体、值对象、聚合、领域服务等概念,同时也要用于描述业务规则、流程和交互.在统一语言中,应该使用业务领域的术语和词汇,而不是技术术语和词汇。例如,应该使用“客户而不是用户”来描述应用程序的客户端,因为客户”是业务领域中的术语,而“用户”则是技术领域的术语.统一语言的重要性在于,它能第帮助开发人员更好地理解业务需求和领域模型,同时也能帮助业务专家更好地理解技术和系统实现.它还能够提高代码的可读性和可维护性,因为代码中的术语和词汇能够技业务专家和开发人员共同理解.1.3.2 领域和子域在研究和解决业务问题时,DDD会按照一定的业务规则将业务领域进行
7、细分,当领域细分到一定的程度后,DDD会将问题范围限定在特定的边界内,在这个边界内建立领域模型.简言之,领域是业务领域的范围和边界.领域可以进一步划分为不同的子领域称为子域,每个子域都包含了一些特定的业务规则和功能,它们共同构成了整个业务领域.领域和子域是基于业务需求和功能进行划分,在划分领域和子域时,需要考虑到业务需求的变化和扩展,使得系统能够更好地适应业务需求的变化.领域和子域的划分也是一种设计上的分屉,它能够帮助开发人员更好地理解和组织系统中的代码和模型。在实现时,每个子域都可以被划分成一个或多个限界上下文(BoundaryContext),每个限界上下文都包含了一些特定的业务规则和功能
8、,它们共同实现了该子域的功能.1.3.3 核心域、通用域和支撑域领域在不断划分的过程中,细分为不同的子域,根据电要性的不同,子域又划分为核心域、通用域和支厚域.1)核心域是指业务领域中的核心业务遗帽和模型,它们是领域驱动设计的核心部分.核心域包含领域模型、领域服务、业务规则等,它们是业务领域中最重要,最稳定的部分.2)通用域是指业务领域中通用的、可复用的业务逻辑和模型,它们不是核心业务逻辑,但可能在多个核心域中被使用。通用域包含一些通用的业务逻担、数据校验、安全控制等.3)充理域是指用于支持业务领域中的核心域和通用域的感础设施和工具,包括数据存玮、消息传递、分布式系统、自动化测试等。支撑域中不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DDD 领域 驱动 分层 架构 设计 业务 场景 实践
