公司来了个新同事,把 DDD 运用得炉火纯青!

这篇具有很好参考价值的文章主要介绍了公司来了个新同事,把 DDD 运用得炉火纯青!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

我们生活中都听说了DDD,也了解了DDD,那么怎么将一个新项目从头开始按照DDD的过程进行划分与架构设计呢?

一、专业术语

各种服务

  • IAAS:基础设施服务,Infrastructure-as-a-service
  • PAAS:平台服务,Platform-as-a-service
  • SAAS:软件服务,Software-as-a-service

推荐一个开源免费的 Spring Boot 实战项目:

https://github.com/javastacks/spring-boot-best-practice

二、架构演变

公司来了个新同事,把 DDD 运用得炉火纯青!

从图中已经可以很容易看出架构的演进过程,通过对三个层的举例来进行说明:

  • SAAS:比如我们最早的就是单体应用,多个业务之间可能都没有进行分层,之后我们业务多了,都各自混淆在一起,后来我们就通过MVC、SSM、分层等方式进行业务拆分,保证业务与业务之间解耦
  • PAAS:随者业务的增长,我们打算分离出一个子系统,但是成本太高,每次都需要从头搭建一个子系统,效率低下。这时我们就抽取除了一些通用技术,比如mesh、SOA、微服务等方式来隔离系统,且对通用技术复用来快速搭建一个系统
  • IAAS:比如订单服务并发量高,单台服务器已经无法满足要求,这时我们需要多台服务器,可能有windows的、linux、mac,想要快速部署就需要屏蔽OS,于是就有了VM、Docker、K8S等技术来屏蔽OS

三、限界上下文

限界上下文概念

公司来了个新同事,把 DDD 运用得炉火纯青!

BC与业务的关系:

通过对业务的划分,比如订单系统,订单是一个子域;库存是一个子域;其中商品再不同的子域中所表示的意义也不同,比如在订单上下文中的商品表示商品的单价、折扣等等;而在库存的上下文中商品表示商品的库存量、成本、存放位置等。

BC与技术的关系:

多个子域之间必须需要在应用层进行聚合,而聚合的过程中就引出了技术方案,比如订单到库存到支付,他们应该采用同步方式;这几个子域调用通知都应该是异步,那么可能就需要消息中间件或其它技术方案

限界上下文划分规则

公司来了个新同事,把 DDD 运用得炉火纯青!

一般来说,先考虑团队规模,来决定最终需要划分到多细粒度的BC,如果团队规模过小而BC过细,则对后期的运维、部署、上线都会造成很大的负担;在确定好粒度后,可以对语义相关性、功能相关性-业务方向、功能相关性-非业务方向进行划分按照以上的规则划分之后就得到了多个BC啦

一个BC代表一个微服务吗?

公司来了个新同事,把 DDD 运用得炉火纯青!

概念: 微服务一般是指将高度相关功能的一个开发部署单元,有自己的技术自治性、技术选型、弹性扩缩容、发布上下频率等,说白了就是各自维护一个业务,然后多个业务组成一个系统,多个业务之间各自管理

关系: 这里的BC其实就是一个领域或一个模块或一个业务,如果两个领域相关性很高,就可以包含多个BC,或者如果一个领域访问量非常大,则需要部署在一个微服务中以提高性能

四、领域驱动设计的四重边界

公司来了个新同事,把 DDD 运用得炉火纯青!

根据上图所示,我们通过四重来进行架构设计:

分而治之:DDD通过规划四重边界,把领域知识做了合理的固化和分层。业务有核心领域和支持域、业务域中又拆分成多个限界上下文(BC),一个BC中又根据领域知识核心与否进行分层,领域层中按照多个业务(子域)的强相关性进行聚合成一个子域。

  • 【第一重边界】确定项目的愿景与目标,确定问题空间,确定核心子领域、通用子领域(多个子领域可以复用)、支撑子领域(额外功能,如数据统计、导出报表)
  • 【第二重边界】解决方案空间里的限界上下文就是一道进程隔离层面的物理边界
  • 【第三重边界】每个限界上下文内,使用分层架构划分为:接口层、领域层、应用层、基础设施层之间的最小隔离
  • 【第四重边界】领域层里为了保证各个领域的完整性和一致性,引入聚合的设计作为隔离领域模型的最小单元

五、整洁分层架构

公司来了个新同事,把 DDD 运用得炉火纯青!

具体说明看图中备注,总的来说就是通过实现与接口分离,让domain层尽量独立,而不耦合与任何模块,这里面包含了领域模型的业务逻辑代码,但不会依赖于具体技术实现,可以很方便更换基础设施层,提供给第三方web调用service

六、六边形架构

公司来了个新同事,把 DDD 运用得炉火纯青!

主动适配: 指来⾃于UI、命令⾏等输⼊型命令, controller就是⼀种端⼝,端⼝的具体实现就是应⽤逻辑⾃身。因此端⼝和具体实现都在应⽤系统的内部。

被动适配: 指访问存储设备,外部服务等。每种访问就是⼀种端⼝,具体实现是各个具体的中间件。因此端⼝在整个应⽤系统的⾥部,具体实现在系统的外部。每⼀种输⼊和输出都是⼀个端⼝,每个端⼝都有具体的实现逻辑,因此整个应⽤系统的架构就是⼀些列的端⼝+适配逻辑组成,架构图就是⼀个多边形形状。有⼏个端⼝需要根据应⽤系统的具体情况⽽定,只是六个端⼝⽐较形象⽽得名为六边形架构。

特点:

  1. 外层依赖内层使得依赖更合理。端⼝就是接⼝,依赖接⼝编程。借此保证了应⽤和实现细节之间的隔离。
  2. 可测试更好

七、洋葱架构

公司来了个新同事,把 DDD 运用得炉火纯青!

洋葱架构针对六边形架构更进⼀步把内层的业务逻辑分为了DDD概念的应⽤服务层、领域服务层和领域模型层。

特点:

  • 围绕独⽴的领域模型构建应⽤
  • 内层定义接⼝,外层实现接⼝
  • 依赖的⽅向指向圆⼼(注意:洋葱架构提倡不破坏耦合⽅向的依赖都是合理的,外层可以依赖直接内层,也可以依赖更⾥⾯的层)
  • 所有的应⽤代码可以独⽴于基础设施编译和运⾏

总结

目前领域驱动设计是目前比较流行的一种架构设计,只需要按照领域驱动设计的四重边界进行架构设计,就能够很好的对各个领域解耦,对后期的业务垂直扩展、功能的水平扩展提供了良好的基础。

版权声明:本文为CSDN博主「我思知我在」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_32828253/article/details/110673205

更多文章推荐:

1.Spring Boot 3.x 教程,太全了!

2.2,000+ 道 Java面试题及答案整理(2024最新版)

3.免费获取 IDEA 激活码的 7 种方式(2024最新版)

觉得不错,别忘了随手点赞+转发哦!文章来源地址https://www.toymoban.com/news/detail-857506.html

到了这里,关于公司来了个新同事,把 DDD 运用得炉火纯青!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 马云说的AI电商真的要来了?AR技术虚拟试穿公司ZERO10引入AI人工智能模型,未来试衣间就应这样!

    ZERO10 是一家提供虚拟试穿体验的公司,他们基于自家的 AR 技术,提供高度逼真且顶尖的虚拟试穿体验。与现有的技术不同,他们的生成式人工智能试穿技术只需要 1-5 张用户照片,就可以实现虚拟试穿。这种方法为规模化应用提供了巨大机会。 虚拟试穿的问题可以看作是生

    2024年02月03日
    浏览(60)
  • 微软语音扩展全球语言支持,发布160个新声音

    导语:全世界有数千种语言,最具语言天赋的人也只能说数十种,普通人能够学会两三种语言已属不易。然而,在科技日新月异的今天,具备自然语言对话能力的AI已经能够掌握上百种语言,扩展人类自身能力,为不同场景的跨境语言服务打开了更多可能性。 近期,微软宣布

    2024年02月08日
    浏览(37)
  • 从8个新 NFT AMM,聊聊能如何为 NFT 提供流动性

    DeFi 的出现,开启了数字金融民主化的革命。其中,通过 AMM 自由创建流动性池极大地增加了 ERC-20 Token 的流动性,并为一些长尾 Token 解锁了价值的发现,因而今天在链上可以看到各种丰富的交易、借贷和杠杆等活动。 而另一方面,随着过去两年 NFT 的普及,基于 NFT 的金融化

    2024年02月14日
    浏览(41)
  • 通过 BigQuery 中的 11 个新链增强 Google Cloud 的区块链数据服务

    2018 年初,Google Cloud 与社区合作,通过BigQuery 公共数据集实现 区块链数据民主化 ;2019 年,又扩展了六个数据集;今天,我们在 BigQuery 公共数据集中添加了 11 个最受欢迎的区块链预览版。 我们也在对该程序中的现有数据集进行改进。 我们这样做是因为区块链基金会、Web3

    2024年02月07日
    浏览(36)
  • 身边同事技术比你差,你会有看不起同事的时候吗?

    中午午休,在群里看到这样一句话:“今天看到别的组用jmeter,看着他们用gui模式的操作,我沉默了”, 当然我也对这句话做出了回应,聊天截图如下: 看到这,群主出来制止了, 说什么无论什么角色,违规一律T! (我没截图,哈哈) 要给我最后一击斩杀,然后,我发现

    2024年03月26日
    浏览(51)
  • Python3.12 新版本之f-string的几个新特性

    目录 概述  f-string表达式 1. 支持转义字符 2. 支持多行字符串 3. 支持重复使用的引号种类 4. 支持无限嵌套 附录 Python3.12新语法特性 Python 3.12在10月2日发布,新版本包含一系列对语言和标准库的改变。 库的改变主要集中在清理已弃用的 API、可用性和正确性等方面。 值得注意

    2024年02月04日
    浏览(30)
  • 遇到一个同事,喜欢查其他同事的BUG,然后截图发工作大群里,还喜欢甩锅,该怎么办?...

    职场上都有哪些奇葩同事? 一位网友吐槽: 遇到一个同事,喜欢查同级别同事的bug,截图发工作群,甚至发大群里,还喜欢甩锅,该怎么办? 职场工贼,人人喊打,网友们纷纷给出了自己的应对之策。 有人说,就在群里回一个大拇哥。 有人说,说明他工作不饱和,告诉领

    2024年02月05日
    浏览(51)
  • 关于AMC8模拟考试延长到1月19日14点,以及常见的几个新问题

    相信过去的周末两天,很多参加今年AMC8美国数学思维竞赛活动的孩子们都参加了AMC8模拟考试。昨天有家长问六分成长,周末两天因故没能参加要不要紧?如果还想参加怎么办? 不用担心!官方已经把AMC8模拟考试的时间延长到1月19日(星期五)14点了,也就是正式比赛当天下

    2024年01月19日
    浏览(79)
  • linux: grep同事匹配多个条件

    在使用 grep 命令时,我们可以通过逻辑运算来匹配两个条件。主要有两种方法:使用 -e 选项或者正则表达式的逻辑“或”操作。 使用 -e 选项 我们可以使用 -e 选项来指定多个模式。当使用 -e 时, grep 会匹配任何一个条件。例如: 这个命令会匹配文件中包含’pattern1’或’

    2024年01月18日
    浏览(34)
  • 在同事的代码中学习-责任链模式

    不知道大家有没有发现,设计模式学习起来其实不容易,并不是说它难,主要是它表达的是思想层面或者说抽象层面的东西,如果你没有实践经历过,感觉就是看了就懂,过了就忘。 所以本人现在也不多花费时间去专门学习设计模式,而是平时在看一些框架源码时,多留意,

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包