DDD实战:战略战术与规则体系

DDD实战课(3):实战篇上 DDD实战课(2):实战篇实战篇:几个实战项目11 | DDD实践:如何用DDD重构中台业务模型?构建中台业务模型自顶向下的策略自底向上的策略12 | 领域建模:如何用事件风暴构建领域模型?事件风暴概念事件风暴准备事件风暴构建领域模型13 | 代码模型(上):如何使用DDD设计微服务代码模型?DDD 分层架构与微服务代码模型微服务一级目录结构各层目录结构代码模型总目录结构14 | 代码模型(下):如何保证领域模型与代码模型的一致性?领域对象的整理从领域模型到微服务的设计领域层的领域对象应用层的领域对象领域对 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云@TOC


一、战略设计层

领域驱动设计(Domain-Driven Design,DDD)的战略设计层是整个设计框架的基石,它关注于如何将复杂的业务问题抽象成一个清晰的领域模型。以下是对战略设计层相关知识点的详细描述,并补充了技术实现细节:

领域划分

领域划分是DDD的第一步,它将业务分解为多个相互关联的领域。领域划分的目的是为了更好地理解和组织业务逻辑。

  • 核心域/支撑域/通用域识别:核心域是业务价值最高的部分,支撑域提供核心域所需的基础服务,通用域则提供可复用的功能。在技术实现上,可以通过识别业务中的核心实体和核心业务流程来确定核心域,支撑域可以通过服务层或基础设施层来实现,而通用域则可以通过设计可复用的库或框架来提供支持。
  • 子域拆分原则:根据业务逻辑的相似性进行子域拆分,确保每个子域内的模型具有一致性。在实践中,可以使用模块化设计原则,如单一职责原则和开闭原则,来指导子域的拆分,确保每个子域的职责明确、易于维护。

限界上下文边界定义

限界上下文是领域模型在实际系统中的边界,它定义了模型适用的范围。

  • 限界上下文边界定义:通过边界上下文来明确不同团队之间的职责划分,确保每个团队专注于自己的领域。在技术实现上,可以使用接口和抽象类来定义边界上下文之间的接口,确保上下文之间的解耦。
  • 统一语言:构建一个术语表,确保团队成员对业务概念有共同的理解。这可以通过文档编写、代码注释和设计评审等方式来实现。

术语表构建方法

术语表是领域模型的核心,它包含了所有重要的业务术语。

  • 术语表构建方法:通过团队讨论、文档编写等方式,确保术语的一致性和准确性。在技术实现上,可以使用领域模型管理工具,如PlantUML或Mermaid,来可视化地构建和展示术语表。
  • 跨团队语义对齐:定期进行沟通,确保不同团队对术语的理解一致。可以通过团队会议、工作坊和代码审查等方式来实现。

上下文映射模式

上下文映射模式描述了不同限界上下文之间的关系。

  • 合作关系/客户-供应商等:定义不同上下文之间的交互方式,如事件发布/订阅、服务调用等。在技术实现上,可以使用消息队列(如RabbitMQ或Kafka)来实现上下文之间的异步通信。

二、战术设计层

战术设计层侧重于如何将战略设计层定义的领域模型转化为实际的技术实现。

基础构件

基础构件是领域模型中的基本元素。

  • 实体标识设计:使用UUID或数据库序列作为实体的唯一标识,确保实体的不可变性。在技术实现上,可以使用分布式ID生成器(如Twitter的Snowflake算法)来生成唯一标识。
  • 值对象不可变性实现:值对象一旦创建,其状态不可改变,以保证数据的一致性。在技术实现上,可以将值对象设计为不可变类,并通过构造函数进行初始化。

服务架构

服务架构定义了领域服务与应用服务之间的界限。

  • 领域服务与应用服务区分:领域服务处理业务逻辑,应用服务处理外部交互。在技术实现上,可以使用RESTful API或gRPC协议来定义服务之间的接口。
  • 工厂模式应用场景:在需要创建复杂对象时,使用工厂模式简化对象的创建过程。在技术实现上,可以使用工厂方法或抽象工厂模式来实现对象的创建。

仓储接口设计

仓储接口设计用于封装数据访问逻辑。

  • CQRS模式:命令查询责任分离(Command Query Responsibility Segregation),将数据读取和数据修改逻辑分离。在技术实现上,可以使用不同的数据库表或存储机制来实现CQRS模式。
  • 事件溯源实现:通过事件记录来恢复领域状态,实现最终一致性。在技术实现上,可以使用事件流数据库(如EventStore)来存储事件。

事件驱动

事件驱动是一种架构风格,它通过事件来传递状态变化。

  • 领域事件建模:定义领域事件,描述业务状态的变化。在技术实现上,可以使用事件总线(如EventBus)来发布和订阅事件。
  • 事件溯源实现:通过事件记录来恢复领域状态,实现最终一致性。在技术实现上,可以使用事件流数据库(如EventStore)来存储事件。

最终一致性策略

最终一致性策略确保系统在事件传递过程中保持一致。

  • 最终一致性:系统中的数据最终会达到一致状态,但过程中可能存在短暂的不一致。在技术实现上,可以使用分布式锁或乐观锁来避免并发冲突。

三、规则体系

规则体系是领域模型中的业务规则集合。

业务规则

业务规则定义了业务逻辑中的约束和条件。

  • 前置条件验证:在执行业务操作前,验证前置条件是否满足。在技术实现上,可以使用规则引擎(如 Drools)来定义和执行业务规则。
  • 不变式约束:定义数据状态的不变性质,确保数据的一致性。在技术实现上,可以使用数据校验框架(如Hibernate Validator)来验证数据的有效性。

流程规则

流程规则定义了业务流程中的步骤和决策。

  • 状态机设计:使用状态机来描述业务流程中的状态转换。在技术实现上,可以使用状态机框架(如StatefulBehaviorTree)来管理状态转换。
  • 工作流引擎对接:使用工作流引擎来执行和监控业务流程。在技术实现上,可以使用工作流引擎(如Activiti或Camunda)来管理流程实例。

Saga事务补偿

Saga事务补偿用于处理分布式系统中的事务。

  • 补偿事务:在事务失败时,执行一系列补偿操作以恢复系统状态。在技术实现上,可以使用补偿事务库(如补偿事务框架)来管理补偿逻辑。

四、扩展实践

扩展实践关注于如何将DDD应用于实际项目中。

架构集成

架构集成是将DDD与其他架构风格和模式结合的过程。

  • 六边形架构适配:将领域模型与六边形架构相结合,实现灵活的系统设计。在技术实现上,可以使用六边形架构框架(如Axon Framework)来支持领域驱动设计。
  • 事件风暴工作坊:通过工作坊的方式,快速生成领域模型。在技术实现上,可以使用在线协作工具(如Miro或Trello)来组织工作坊。

微服务拆分模式

微服务拆分模式是将大型系统拆分为多个独立的服务。

  • 微服务拆分模式:根据业务功能将系统拆分为多个微服务,提高系统的可维护性和可扩展性。在技术实现上,可以使用容器化技术(如Docker)和编排工具(如Kubernetes)来部署和管理微服务。
  • 服务治理:微服务架构中,服务治理是确保服务之间高效协作的关键。在技术实现上,可以使用服务注册与发现(如Consul或Eureka)、服务网关(如Zuul或Spring Cloud Gateway)和服务配置中心(如Spring Cloud Config)来管理服务。

效能工具

效能工具用于提高开发效率和系统性能。

  • 代码生成框架:自动生成代码,减少重复工作。在技术实现上,可以使用代码生成器(如MyBatis Generator或CodeFirst)来生成数据库访问层代码。
  • 契约测试工具:确保接口的一致性和稳定性。在技术实现上,可以使用契约测试框架(如Swagger或Postman)来定义和验证API契约。
  • 可视化建模平台:提供可视化的领域模型设计工具。在技术实现上,可以使用领域模型设计工具(如PlantUML或Mermaid)来创建领域模型图。

优快云

博主分享

📥博主的人生感悟和目标

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。

面试备战资料

八股文备战
场景描述链接
时间充裕(25万字)Java知识点大全(高频面试题)Java知识点大全
时间紧急(15万字)Java高级开发高频面试题Java高级开发高频面试题

理论知识专题(图文并茂,字数过万)

技术栈链接
RocketMQRocketMQ详解
KafkaKafka详解
RabbitMQRabbitMQ详解
MongoDBMongoDB详解
ElasticSearchElasticSearch详解
ZookeeperZookeeper详解
RedisRedis详解
MySQLMySQL详解
JVMJVM详解

集群部署(图文并茂,字数过万)

技术栈部署架构链接
MySQL使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群Docker-Compose部署教程
Redis三主三从集群(三种方式部署/18个节点的Redis Cluster模式)三种部署方式教程
RocketMQDLedger高可用集群(9节点)部署指南
Nacos+Nginx集群+负载均衡(9节点)Docker部署方案
Kubernetes容器编排安装最全安装教程

开源项目分享

项目名称链接地址
高并发红包雨项目https://gitee.com/java_wxid/red-packet-rain
微服务技术集成demo项目https://gitee.com/java_wxid/java_wxid

管理经验

【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718

希望各位读者朋友能够多多支持!

现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

DDD学习笔记与实战 简单点就是一种格式话术,通过这种话术来为各个定义好的领域增加定语,宾语甚至从句。比如:为了(员工考勤计算)的目的来设计(考勤)系统。实现这个系统需要有(员工的请假,员工的考勤)的功能。因为员工请假和考勤在业务上还可以进行划分,所以为了(员工请假)的目的来设计(请假)系统。实现这个系统需要有(创建请假单,修改请假单,审批,发布请假单)的功能。到此我们发现功能不可拆分,过度拆分会引起运维上的困难,所以我们认为员工请假。 阅读详情

相关推荐

进击的码农(一)——领域驱动设计(DDD)落地实战

前言 接触DDD也有一段时间了, 参考了很多前辈的分享,他们的知识和经验对自己的帮助很大。本文以一个订单服务为示例来落地,同时假设你对DDD的相关概念都已经有所了解。 代码结构 主流的都会采用分层架构的方式,如下: 同样,还有用依赖倒置(DI)的, 都差不多。我们同样采用分层架构,分层结构如下: interfaces用户接口层:用户请求的入口,通常就是些controller。 applicat...

仰望星空 脚踏实地 5270

DDD实战

中台本质是业务模型,微服务是业务模型的系统落地,DDD 是一种设计思想,它可以同时指导中台业务建模和微服务设计,它们之间就是这样的一个铁三角关系。DDD 强调领域模型和微服务设计的一体性,先有领域模型然后才有微服务,而不是脱离领域模型来谈微服务设计。 1 微服务 DDD 2领域、子域、核心域、通用域和支撑域 DDD 的领域就是这个边界内要解 决的业务问题域。 我们把划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或更小的业务范围。 ...

zhonghuixiong的专栏 2539

UniApp实现多端支付功能完整实现指南

支付业务流程多端支付实现安全性保障异常处理最佳实践支付基础知识多端支付实现统一支付封装安全性处理异常处理最佳实践根据具体业务场景选择合适的支付方式注重安全性和用户体验做好异常处理和日志记录持续优化和改进支付流程关注我,持续分享前端项目开发经验!

weixin_63454527的博客 2129

【DDD】全网最详细2万字讲解DDD,从理论到实战(代码示例)

2万字DDD学习笔记总结,全是干货。理论+实战(代码示例) 结合

BookSea的博客 4万+

【QT】基于QSerialPort的跨平台串口通信实战指南

本文是一份基于Qt QSerialPort模块的跨平台串口通信实战指南。详细介绍了从硬件基础、QSerialPort核心类使用、参数配置、设备自动发现到数据异步读写和错误处理的完整流程,并通过构建一个功能齐全的串口调试助手实例,帮助开发者快速掌握在Windows、Linux和macOS系统下进行高效、稳定的串口应用开发。

a1b2c3d的博客 982

避坑指南:STM32CubeMX配置USB虚拟串口时Heap Size设置的那些坑

本文深入剖析了使用STM32CubeMX配置USB虚拟串口时,因Heap Size设置不当导致设备无法识别的常见问题。文章从故障现象出发,详细解释了堆内存不足如何影响USB枚举过程,并提供了从内存布局分析、动态监控到系统化调试的完整解决方案,帮助开发者从根本上避免这一配置陷阱。

ttt77的博客 599

DDD战略战术与规则体系实践

在领域驱动设计(Domain-Driven Design,DDD)的战略设计层,我们不仅需要关注如何将复杂的业务问题域分解为可管理的部分,更要深入理解每个部分之间的交互和依赖,确保整个设计框架的健壮性和灵活性。领域划分是DDD的核心,它要求设计者对业务问题域有深刻的理解。以下是对领域划分的进一步细化:核心域/支撑域/通用域识别:核心域通常涉及业务的核心价值,如电商平台的商品管理、订单处理等;支撑域则提供基础服务,如用户管理、权限验证等;通用域则是跨领域的共享组件,如日期处理、日志记录等。子域拆分原则:子域的

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1027

[VisionPro] CogPMAlignTool 工具详解

[VisionPro] [CogPMAlignTool] [模板匹配]

weixin_43163656的博客 1万+

DDD战略战术与规则体系解析

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

AIHacksCash的博客 920

基于PLC的全自动洗衣机控制系统+控制程序

本设计使用PLC控制系统替换了传统的继电器控制系统,实现了全自动洗衣机在硬件方面的提升,丰富了全自动洗衣机在软件方面的功能,提高了全自动洗衣机的洗衣效率,基本可以满足用户的洗衣需求。

zzzz114231的博客 8957

深度解析:Android开发工程师(嵌入式系统方向)职位 - 技术需求、面试准备与发展路径

本文深入分析了嵌入式Android开发工程师的岗位要求和技术内涵。该职位需要掌握C/C++、Linux系统编程、硬件接口等核心技术,能够进行Android系统底层定制开发,包括HAL层实现、Framework修改、性能优化等工作。文章详细解读了岗位职责,梳理了必备技术栈,提供了针对性的面试问题与参考答案,并探讨了职业发展路径。这类岗位要求开发者兼具软件工程能力和硬件基础知识,适合在智能电视、机顶盒、车载系统等嵌入式领域发展的技术人员。

郑伟强dev的专栏 135

DDD深度解析:战略战术与规则

不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。领域划分是DDD的基础,它要求对业务进行深入分析,识别出业务中的核心实体和它们之间的关系。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 686

PentAGI自动渗透测试平台搭建与使用

但是PentAGI的缺陷也比较明显,一个是自动化程度高带来过程的介入困难,整个渗透的过程都交给AI自动决策,无法进行人工调整,耗时较长;从上述过程来看PentAGI似乎是一个比较“可用”的AI自动化渗透测试平台,但是在继续等待测试的过程中,PentAGI的一些缺点也暴露了出来,一个是测试的过程非常漫长,因为PentAGI是使用配置大模型API key的方式全自动运行,支持openai、deepseek等主流LLM大模型,过程中不需要人工介入,会不断自动调整,所以比较依赖于大模型本身的响应速度。

墨痕诉清风的博客 2415

DDD战略战术解析

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》、(架构篇)、作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 702

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

DDD战略战术深度解析

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

AIHacksCash的博客 692

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

DDD深度解析:战略战术全解

领域驱动设计(DDD)是一种强大的软件设计方法,通过关注领域模型和业务逻辑,提高软件系统的可维护性和可扩展性。通过上述对战略设计层、战术设计层、规则体系和扩展实践的分析,我们可以更好地理解和应用DDD,构建高质量的软件系统。在实际应用中,需要根据具体的项目需求和业务场景,灵活运用DDD的原则和方法,以达到最佳的设计效果。📥博主的人生感悟和目标- 💂博客主页Java程序员廖志伟- 👉开源项目Java程序员廖志伟- 🌥哔哩哔哩Java程序员廖志伟- 🎏个人社区Java程序员廖志伟- 🔖。

AIHacksCash的博客 430

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

DDD总结学习及golang实战

最近一直在学习DDD的相关概念,主要通过极客欧创新老师的《DDD实战课》和Eric Evans《领域驱动设计》书籍进行阅读,之后记录下核心要点后,通过golang来实战下,进而更好的进行后续进阶。

我的梦 5592

DDD战略战术全解析

限界上下文是DDD中的一个概念,它定义了领域模型在代码中的边界。限界上下文通常由一组相关的子域组成,它有助于将领域模型划分为可管理的部分,并确保模型的一致性。限界上下文识别:通过识别业务事件和业务规则,可以确定限界上下文的边界。限界上下文边界维护:随着业务的发展,限界上下文边界可能需要调整,这需要团队成员共同参与和沟通。

MoneyHacksPro的博客 360

实战DDD:一文了解什么是DDD

今天的软件相对之前的软件,需求越来越复杂,变化越来越快。软件架构不断的在演进,一方面是为了适应新的需求,一方面也在寻找软件简单化解决方案,通过架构的规范是的软件更容易维护,逻辑更清晰。所以架构一直在追求易维护、可扩展。从早期的modle1、modle2,到现在这种微服务架构,一直在追求一个能让软件开发变得简单的软件架构,但往往事与愿违。往往软件在开发初期,架构合理、分层清晰,但进过多年维护后,系统变得一团乱码。

m0_61075687的博客 5126

基于DDD的微服务设计和开发实战

基于DDD的微服务设计和开发实战 作者:欧创新、邓頔、文艺 目录 基于DDD的微服务设计和开发实战 1 目标 2 适用范围 3 DDD 分层架构视图 展现层 应用层 领域层 基础层 4 服务视图 微服务内的服务视图 1、接口服务 2、应用服务 3、领域服务 4、基础服务 微服务外的服务视图 1. 前端应用与微...

Liyiming 1万+

DDD 深度解析与实战

领域驱动设计(Domain-Driven Design,DDD)作为一种软件设计方法,其核心在于将业务逻辑抽象为软件模型,从而提高软件系统的业务适应性和可维护性。以下将详细阐述战略设计层的关键知识点及其技术实现细节。1. 领域划分领域划分是将复杂的业务系统分解为多个相对独立的领域,每个领域代表一种业务概念。在进行领域划分时,我们可以采用以下技术实现细节:2. 核心域/支撑域/通用域识别在识别核心域、支撑域和通用域时,我们可以采用以下技术实现细节:3. 子域拆分原则子域的拆分应遵循以下原则:4. 限界上下文边

AIHacksCash的博客 841
上一篇: 领域驱动设计(DDD)核心实践
下一篇: Spring框架核心技术解析
Java开发廖志伟
博客等级 码龄2年 3491粉丝 1534原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值