首页 > 其他分享 >领域驱动设计(DDD)的几种典型架构介绍

领域驱动设计(DDD)的几种典型架构介绍

时间:2024-08-29 10:38:10浏览次数:3  
标签:架构 BC 业务 几种 领域 子域 DDD

领域驱动设计(DDD)的几种典型架构介绍   平常工作中都听说了DDD,也对DDD做定程度的了解,那么怎么将一个新项目从头开始按照DDD的过程进行划分与架构设计呢? 一、专业术语 各种服务 IAAS:基础设施服务,Infrastructure-as-a-service PAAS:平台服务,Platform-as-a-service SAAS:软件服务,Software-as-a-service   二、架构演变 从图中已经可以很容易看出架构的演进过程,通过对三个层的举例来进行说明: SAAS:比如我们最早的就是单体应用,多个业务之间可能都没有进行分层,之后我们业务多了,都各自混淆在一起,后来我们就通过MVC、SSM、分层等方式进行业务拆分,保证业务与业务之间解耦 PAAS:随者业务的增长,我们打算分离出一个子系统,但是成本太高,每次都需要从头搭建一个子系统,效率低下。这时我们就抽取除了一些通用技术,比如mesh、SOA、微服务等方式来隔离系统,且对通用技术复用来快速搭建一个系统 IAAS:比如订单服务并发量高,单台服务器已经无法满足要求,这时我们需要多台服务器,可能有windows的、linux、mac,想要快速部署就需要屏蔽OS,于是就有了VM、Docker、K8S等技术来屏蔽OS   三、限界上下文 限界上下文概念 BC与业务的关系: 通过对业务的划分,比如订单系统,订单是一个子域;库存是一个子域; 其中商品再不同的子域中所表示的意义也不同,比如在订单上下文中的商品表示商品的单价、折扣等等;而在库存的上下文中商品表示商品的库存量、成本、存放位置等。 BC与技术的关系: 多个子域之间必须需要在应用层进行聚合,而聚合的过程中就引出了技术方案,比如订单到库存到支付,他们应该采用同步方式;这几个子域调用通知都应该是异步,那么可能就需要消息中间件或其它技术方案     限界上下文划分规则 一般来说,先考虑团队规模,来决定最终需要划分到多细粒度的BC,如果团队规模过小而BC过细,则对后期的运维、部署、上线都会造成很大的负担; 在确定好粒度后,可以对语义相关性、功能相关性-业务方向、功能相关性-非业务方向进行划分 按照以上的规则划分之后就得到了多个BC啦 一个BC代表一个微服务吗? 概念:微服务一般是指将高度相关功能的一个开发部署单元,有自己的技术自治性、技术选型、弹性扩缩容、发布上下频率等,说白了就是各自维护一个业务,然后多个业务组成一个系统,多个业务之间各自管理 关系:这里的BC其实就是一个领域或一个模块或一个业务,如果两个领域相关性很高,就可以包含多个BC,或者如果一个领域访问量非常大,则需要部署在一个微服务中以提高性能 四、领域驱动设计的四重边界 根据上图所示,我们通过四重来进行架构设计: 分而治之:DDD通过规划四重边界,把领域知识做了合理的固化和分层。业务有核心领域和支持域、业务域中又拆分成多个限界上下文(BC),一个BC中又根据领域知识核心与否进行分层,领域层中按照多个业务(子域)的强相关性进行聚合成一个子域。另外,搜索公众号后端架构师后台回复“架构整洁”,获取一份惊喜礼包。 【第一重边界】确定项目的愿景与目标,确定问题空间,确定核心子领域、通用子领域(多个子领域可以复用)、支撑子领域(额外功能,如数据统计、导出报表) 【第二重边界】解决方案空间里的限界上下文就是一道进程隔离层面的物理边界 【第三重边界】每个限界上下文内,使用分层架构划分为:接口层、领域层、应用层、基础设施层之间的最小隔离 【第四重边界】领域层里为了保证各个领域的完整性和一致性,引入聚合的设计作为隔离领域模型的最小单元 五、整洁分层架构 具体说明看图中备注,总的来说就是通过实现与接口分离,让domain层尽量独立,而不耦合与任何模块,这里面包含了领域模型的业务逻辑代码,但不会依赖于具体技术实现,可以很方便更换基础设施层,提供给第三方web调用service 六、六边形架构 主动适配:指来⾃于UI、命令⾏等输⼊型命令, controller就是⼀种端⼝,端⼝的具体实现就是应⽤逻 辑⾃身。因此端⼝和具体实现都在应⽤系统的内部。 被动适配:指访问存储设备,外部服务等。每种访问就是⼀种端⼝,具体实现是各个具体的中间件。因此端⼝在整个应⽤系统的⾥部,具体实现在系统的外部。 每⼀种输⼊和输出都是⼀个端⼝,每个端⼝都有具体的实现逻辑,因此整个应⽤系统的架构就是⼀些列的端⼝+适配逻辑组成,架构图就是⼀个多边形形状。有⼏个端⼝需要根据应⽤系统的具体情况⽽定,只是六个端⼝⽐较形象⽽得名为六边形架构。 特点: 1. 外层依赖内层使得依赖更合理。端⼝就是接⼝,依赖接⼝编程。借此保证了应⽤和实现细节之间的隔离。 2. 可测试更好 七、洋葱架构 洋葱架构针对六边形架构更进⼀步把内层的业务逻辑分为了DDD概念的应⽤服务层、领域服务层和领域模型层。 特点: (1)围绕独⽴的领域模型构建应⽤ (2)内层定义接⼝,外层实现接⼝ (3)依赖的⽅向指向圆⼼(注意:洋葱架构提倡不破坏耦合⽅向的依赖都是合理的,外层可以依赖直接内层,也可以依赖更⾥⾯的层) (4)所有的应⽤代码可以独⽴于基础设施编译和运⾏ 八、总结 目前领域驱动设计是目前比较流行的一种架构设计,只需要按照领域驱动设计的四重边界进行架构设计,就能够很好的对各个领域解耦,对后期的业务垂直扩展、功能的水平扩展提供了良好的基础。

标签:架构,BC,业务,几种,领域,子域,DDD
From: https://www.cnblogs.com/jeanpwest/p/18386128

相关文章

  • 计算机架构设计的8个伟大思想
    “Theseareeightgreatideasthatcomputerarchitectshaveinventedinthelast60yearsofcomputerdesign.Theyaresopowerfultheyhavelastedlongafterthefirstcomputerthatusedthem,withnewerarchitectsdemonstratingtheiradmirationbyimitat......
  • 如何驱动企业数字化转型的敏捷企业的创新实践指南:敏捷企业架构的制胜之道
    敏捷企业架构如何引领企业转型变革在全球化与数字化交织的新时代,企业正处于前所未有的变革浪潮中。传统的企业架构方式已经难以应对瞬息万变的市场需求和技术革新。作为一种突破性解决方案,敏捷企业架构提供了一个灵活且强大的框架,帮助企业在动态环境中保持竞争优势,迅速响应市......
  • 从战略到执行:解密敏捷企业架构的变革之道,助力企业未来增长
    敏捷企业架构的新时代与变革契机在数字化转型浪潮中,企业正面临前所未有的市场挑战与技术机遇。传统企业架构(EnterpriseArchitecture,EA)虽然能够为企业提供稳定的战略支持,但其应对市场快速变化的能力不足。而敏捷方法(Agile)以其高效迭代和灵活性,正在迅速改变企业的运营方式。......
  • 全面解读敏捷企业架构的落地策略,助力企业实现数字化转型
    敏捷企业架构如何推动企业转型成功在当今迅速变化的商业环境中,企业面对的最大挑战之一是如何快速适应市场变化并保持竞争力。传统的企业架构虽然在稳定性和可控性方面具备优势,但在面对数字化转型的浪潮时,显得僵化且反应迟缓。敏捷企业架构通过引入敏捷方法的灵活性和迭代性,为......
  • 架构师面试题 - Spring Boot 面试专题(33题含答案)
    目录前言1、什么是springboot2、什么是JavaConfig?3、SpringBoot有哪些优点?答:4、SpringBoot提供了哪些核⼼功能?5、如何重新加载SpringBoot上的更改,⽽⽆需重新启动服务器?6、创建⼀个SpringBootProject的最简单的⽅法是什么?7、运⾏SpringBoot有哪......
  • 大模型提示词工程技术4-提示词架构设计,包括:TAG框架,TRACE框架,ICIO框架
    大模型提示词工程技术4-提示词架构设计,包括:TAG框架,TRACE框架,ICIO框架。《大模型提示词工程技术》的作者:微学AI,这是一本专注于提升人工智能大模型性能的著作,它深入浅出地讲解了如何通过优化输入提示词来引导大模型生成高质量、准确的输出。书中不仅涵盖了提示词工程的基本......
  • 深入解析VLAN:现代网络架构的关键技术
    ​一、什么是VLAN?VLAN(virtuallocalAreaNetwork)虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域,VLAN内的主机间可以直接通信,而VLAN之间不能直接互通。这样,广播报文就被限制在了一个VLAN内。二、为什么需要VLAN?早期的以太网是一......
  • Django 后端架构开发:文件处理技术
    Django后端架构开发:文件处理技术目录⭐Excel数据处理与Django集成openpyxl:Excel读写库的使用与Django集成XlsxWriter:高级Excel报表生成......
  • 主观与客观,破除DDD凭经验魔咒
    本文书接上回《学习真DDD的最佳路径》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。神秘的“凭经验”一千个人眼中有一千个哈姆雷特,每个人的经历不同,认知不同,那么看待哈姆雷特的角......
  • 第42天:WEB攻防-PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作 - 快捷方式
    接受的参数值未进行过滤直接带入SQL查询 MYSQL注入:(目的获取当前web权限)1、判断常见四个信息(系统,用户,数据库名,版本)2、根据四个信息去选择方案root用户:先测试读写,后测试获取数据非root用户:直接测试获取数据  #PHP-MYSQL-SQL常规查询获取相关数据:1、数据库版本-看是否......