
【DDD-领域驱动设计】
文章平均质量分 96
DDD的全称为Domain-driven Design,即领域驱动设计。领域、问题域、领域模型、设计、驱动这几个词语的含义和联系的角度去阐述DDD是如何融入到我们平时的软件开发初期阶段的。
小小工匠
show me the code ,change the world
展开
-
模型思维 - 领域模型的应用与解析
/ 持久化对象// JSON字符串// 其他字段及getter/setter// 值对象:价格区间// 枚举:AUTO_APPROVE/MANUAL_REVIEW// 枚举:CNY/USD// 业务方法:校验价格是否在区间内// 聚合根:价格规则// 核心业务方法:校验报价单一职责原则领域对象:专注业务逻辑数据对象:专注存储结构DTO:专注数据传输开闭原则领域模型修改不影响存储层存储结构变化不影响业务逻辑显式语义原则通过。原创 2025-02-23 22:03:54 · 3476 阅读 · 0 评论 -
DDD - 彻底搞懂 DO 、DTO 、 Entity
对象类型定位职责生命周期典型特征Entity领域模型核心封装业务逻辑,维护领域规则,保证聚合根的一致性贯穿领域层- 具有唯一标识(ID)- 包含业务方法DO数据持久化对象与数据库表结构直接映射,仅关注数据存储格式仅在数据访问层(DAO)- 纯数据结构- 无业务逻辑DTO跨层数据传输载体在应用层与外部系统(如前端、其他服务)之间传输数据请求/响应过程- 扁平化结构- 无行为明确分层边界基础设施层:只处理DO(OrderDAO操作OrderDO领域层:只处理Entity(原创 2025-02-24 05:45:00 · 2681 阅读 · 0 评论 -
DDD - 领域驱动设计与微服务架构_重构实践
领域驱动设计(DDD)与微服务架构的结合已成为应对业务复杂性的有效解决方案。 接下来我们通过一个XX系统的重构案例,展示如何运用DDD进行领域划分完成一次重构之旅。DDD是一种架构设计方法,强调从业务出发合理划分领域边界,调整现有架构并优化代码,以实现演进式架构。其核心理念是通过领域拆分解决复杂业务问题,控制和管理业务复杂性。领域指特定的问题域,用来限定业务边界。领域模型是对业务领域中概念、规则和行为的抽象,通常由领域专家和开发人员共同创建领域模型反映了业务领域中的实体、值对象、聚合、工厂和存储库等,它原创 2025-02-23 06:15:00 · 2415 阅读 · 0 评论 -
DDD - 实现限界上下文集成的四种方式
每种集成方式都有其适用场景,实际项目中常组合使用。建议通过API网关统一入口,配合服务网格提升通信可靠性。的清晰划分和优雅集成是系统设计的关键。接下来我们来梳理下四种主流的上下文集成方式,并分析其适用场景。通过消息中间件实现松耦合通信,上下文之间仅通过事件交互。使用OpenFeign声明式HTTP客户端实现同步调用。使用RestTemplate进行HTTP通信。多个服务直接操作同一数据库。原创 2025-02-22 16:08:16 · 2350 阅读 · 0 评论 -
DDD - 微服务架构模型_领域驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构) vs 六边形架构(端口-适配器架构)
微服务架构(Microservices Architecture)是一种将单一应用程序拆解为多个小型服务的架构风格。每个微服务实现一个业务功能,独立部署和独立扩展,这种方式极大地提升了系统的灵活性、可维护性和可扩展性。松耦合:每个微服务都可以独立演化,修改一个微服务不会影响到其他服务。独立部署:每个微服务可以独立部署,减少了系统升级时的风险。技术栈多样性:不同的微服务可以采用不同的技术栈,选择最适合的工具和框架。高可扩展性:通过服务拆分,可以根据业务需要独立扩展某个服务,避免了单体应用的性能瓶颈。原创 2025-01-31 21:13:41 · 3787 阅读 · 0 评论 -
DDD - 领域驱动设计分层架构:构建可演化的微服务架构
领域驱动设计(Domain-Driven Design,DDD)是一种设计方法论,它强调通过对领域的深入理解,驱动软件的设计与架构。而DDD分层架构是DDD中一种经典的架构模式,它帮助开发者将复杂的业务逻辑分割成不同的层次,每个层次负责不同的职责。通过这种方式,DDD分层架构使得系统的业务逻辑更加清晰,架构的维护与演进也变得更加容易。原创 2025-01-31 19:54:21 · 2991 阅读 · 0 评论 -
DDD - 领域事件_解耦微服务的关键
领域事件(Domain Event)是领域驱动设计(DDD)中的一个重要概念,用于表示在领域中发生的、对业务有重要意义的事件。总之,通过领域事件驱动的异步化机制,可以推动业务流程和数据在各个不同微服务之间的流转,实现微服务的解耦,减轻微服务之间服务调用的压力,提升用户体验。:领域事件可以切断微服务之间的强依赖关系,发布方只需发布事件,而不需要关心订阅方的处理结果,从而实现微服务之间的解耦。:领域事件可以支持复杂的业务流程,尤其是在跨多个微服务的场景中,事件驱动的方式可以简化系统的设计和维护。原创 2025-01-31 15:26:37 · 3348 阅读 · 0 评论 -
DDD - 如何设计支持快速交付的DDD技术中台
以往建设的系统都分为前台和后台,前台就是与用户交互的UI界面,后台就是服务端完成的业务逻辑操作。然而,在我们以往开发的很多业务系统中,有一些内容是共用的部分,在未来开发的业务系统中也要使用。因此,如果能把这些内容提取出来做成公用组件,那么在未来,开发系统就简单了,不用每次都重头开发,复用这些组件就可以了。但是,这些公用的组件到底属于前台还是后台呢?都不属于。它既包含前台的界面,也包含后台的逻辑,因此被称为“中台”。原创 2025-01-19 20:00:03 · 2920 阅读 · 0 评论 -
DDD - 整洁架构_解决技术设计困局
整洁架构的中心是基于DDD的业务实现,即那些通过领域模型指导设计与开发的Service、Entity与ValueObject。整洁架构的最外层是各种硬件、设备与技术框架。而整洁架构最核心的思想,是通过适配器层,将业务实现与技术框架解耦,这也是DDD落地到架构设计的最佳实践。因此,支持DDD与微服务的技术中台,就是基于整洁架构的思想,将DDD底层的那些烦琐的聚合操作、仓库与工厂的设计,与微服务的技术框架,以及整洁架构中的适配器,统统封装在技术中台中。原创 2025-01-18 15:43:24 · 3451 阅读 · 0 评论 -
DDD - 微服务落地的技术实践
如今,做一个优秀的程序员越来越难。激烈的市场竞争、互联网快速的迭代、软件系统规模化发展,无疑都大大增加了软件设计的难度。因此,对于架构师的能力要求也越来越高:(1)能够将业务转换为技术;(2)能合理利用技术支撑业务。能够将业务转换为技术,意味着需要将更多的精力放到对业务的理解中。技术本身并不能产生价值,必须具备超强的业务落地能力,能够将用户的业务需求落地到技术方案,开发出用户乐于使用的产品和功能,用户才能为之买单,企业才能挣钱。具备这样的能力,才能够强力地帮助企业产生效益,才能体现价值。原创 2025-01-18 11:59:32 · 3278 阅读 · 0 评论 -
DDD - 微服务设计与领域驱动设计实战(下)_落地微服务设计实现
当大家看到贫血模型、充血模型、策略模式、装饰者模式时,发出这样的感慨:“难道这就是 DDD 吗?和我们平时的开发没有什么不同啊。”殊不知,其实还没有 Get 到 DDD 的真谛。DDD 的真谛是领域建模,即深入理解业务。只有深入理解业务,将对业务的深入理解设计到领域模型中,设计出来的软件才更加专业,让用户的使用更满意。因此,基于每个限界上下文进行领域建模,不断地将每个功能加入模型中,落地每个微服务的设计。当业务越来越复杂,理解越来越深入的时候,适时地调整原有的模型,就能适应新的功能,使设计始终高质量。原创 2025-01-16 19:44:13 · 2709 阅读 · 0 评论 -
DDD - 微服务设计与领域驱动设计实战(中)_ 解决微服务拆分难题
微服务的技术架构其实并不难。很多开发团队在微服务转型初期,将关注点主要放到了对微服务技术架构的学习。然而,当他们真正开始将微服务落地到具体的业务中时,才发现,真正的难题是微服务按照什么原则拆分、如何拆分,以及会面对哪些潜在风险。采用DDD进行需求的分析建模,可以帮助微服务的设计质量提高,实现“低耦合、高内聚”,进而充分发挥微服务的优势。然而,在微服务的设计实现还要解决诸多的难题拆解了微服务设计实现的这些难题,及其解决思路。原创 2025-01-12 22:32:38 · 2696 阅读 · 0 评论 -
DDD - 微服务设计与领域驱动设计实战(上)_统一建模语言及事件风暴会议
微服务设计最核心的难题是微服务的拆分,不合理的微服务拆分不仅不能提高研发效率,反倒还使得研发效率更低,因此要讲究“小而专”的设计。“小而专”的设计意味着微服务的设计不是简单拆分,而是对设计提出了更高的要求,要“低耦合、高内聚”。那么,如何做到“低耦合、高内聚”,实现微服务的“小而专”呢?那就需要“领域驱动设计”作为方法论,来指导我们的开发。用“领域驱动设计”是业界普遍认可的解决方案,也就是解决微服务如何拆分,以及实现微服务的高内聚与单一职责的问题。但是,领域驱动设计应当怎样进行呢?原创 2025-01-12 08:23:30 · 3620 阅读 · 0 评论 -
DDD - 问题域和限界上下文
DDD - 聚合、聚合根、仓库与工厂中我们以用户下单这个场景,探讨了领域驱动设计的建模、分析与设计的过程,然而,站在更大的电商网站的角度,用户下单只是其中一个很小的场景。那么,如果要对整个电商网站进行领域驱动设计,应当怎么做呢?它包含那么多场景,每个场景都要包含那么多的领域对象,进而会形成很多的领域对象,并且每个领域对象之间还有那么多复杂的关联关系。这时候,怎样通过领域驱动来设计这个系统呢?怎么去绘制领域模型呢?是绘制一张密密麻麻的大图,还是绘制成一张一张的小图呢?原创 2025-01-12 06:15:00 · 3685 阅读 · 0 评论 -
DDD - 聚合、聚合根、仓库与工厂
DDD-服务、实体与值对象的两种设计思路:贫血模型与充血模型中我们知道了,要将领域模型最终转换为程序设计,可以落实到3种类型的对象设计,即服务、实体与值对象,然后进行一些贫血模型与充血模型的设计思路。但这远远不够,还需要有聚合、仓库与工厂的设计。聚合,以及它的设计实现:工厂与仓库,它们是DDD中充血模型设计的重要支柱。通过这些设计我们会发现,它们与我们传统的基于DAO的贫血模型设计有诸多的不同。通过聚合实现了整体与部分的关系,客户程序只能操作整体,而将对部分的操作封装在了仓库与工厂中;原创 2025-01-11 19:57:24 · 3271 阅读 · 0 评论 -
DDD - 服务、实体与值对象的两种设计思路:贫血模型与充血模型
基于DDD的程序设计,就是将前面设计的领域模型,映射成数据架构中的程序设计,从而通过领域驱动提高软件设计质量。那么,应当怎样进行映射,让领域模型指导程序设计呢?要将领域模型映射到程序设计,最终都会落实到3种类型的对象设计:服务、实体和值对象。基于DDD的程序设计,领域模型分析只是软件需求分析的中间过程,它最终需要落地到程序设计。领域模型的最终落地是三种类型的对象:服务、实体与值对象,而设计思路有两种:贫血模型与充血模型。通过这样的落地,领域模型就能很好地指导程序开发,提高设计质量。原创 2025-01-11 14:36:38 · 3187 阅读 · 0 评论 -
DDD - 如何运用 DDD 进行数据库设计
过去,系统的软件设计是以数据库设计为核心,当需求确定下来以后,团队首先开始进行数据库设计。因为数据库是各个模块唯一的接口,当整个团队将数据库设计确定下来以后,就可以按照模块各自独立地进行开发了。在上面的过程中,为了提高团队开发速度,尽量让各个模块不要交互,从而达到各自独立开发的效果。但是,随着系统规模越来越大,业务逻辑越来越复杂,我们越来越难于保证各个模块独立不交互了。随着软件业的不断发展,软件系统变得越来越复杂,各个模块间的交互也越来越频繁,这时,原有的设计过程已经不能满足我们的需要了。原创 2025-01-11 10:36:16 · 2941 阅读 · 0 评论 -
DDD - 如何运用 DDD 进行软件设计
开发人员在最开始收到的关于用户付款功能的需求描述是这样的: - 在用户下单以后,经过下单流程进入付款功能; - 通过用户档案获得用户名称、地址等信息; - 记录商品及其数量,并汇总付款金额; - 保存订单; - 通过远程调用支付接口进行支付。原创 2025-01-10 22:25:29 · 2819 阅读 · 0 评论 -
DDD - 软件退化原因及案例分析
2004 年,软件大师 Eric Evans 的不朽著作《领域驱动设计:软件核心复杂性应对之道》面世,从书名可以看出,这是一本应对软件系统越来越复杂的方法论的图书。其中谈到了很多DDD的核心思想,当时国内互联网才刚开始,当时业务复杂度较低,真正按照其方法去实践的机会并不多,DDD的优势并未完全显现。项目多以快速上线和高效编码为导向,领域驱动设计对客户来说似乎显得过于复杂和慢速…原创 2025-01-10 21:46:07 · 3182 阅读 · 0 评论 -
DDD - 聚合与聚合根_如何理解 Respository与DAO
文章目录PreQuestion如何理解 聚合和聚合根利用聚合解决业务上的原子性操作如何确定聚合和聚合根Respository VS DAOPre通常情况,我们都会面临这样的一个问题: 架构图说的是一回事,代码说的却是另一回事 。 当然了这里面的影响因素很多,有一个原因就是某些约束没有在设计中体现出来,也就是说设计的表现力不够 , 而这些约束需要阅读代码才能够知道,这就增加了理解和使用这个组件的难度。这个问题在基于数据建模的设计方法上比较明显, 举个例子:DDD - 如何理解Entity与VO提到原创 2022-01-12 00:09:12 · 36211 阅读 · 1 评论 -
DDD - 如何理解Entity与VO
文章目录概述状态标识概述为了更好的理解 Entity与VO,我们需要先区分两个概念: 状态 、 标识状态标识原创 2022-01-11 19:36:40 · 37642 阅读 · 0 评论