领域驱动设计

2024/4/11 17:47:52

当Subdomain遇见Bounded Context

《实现领域驱动设计》的作者Vernon根据过去几年DDD的实战经验又写了一本《领域驱动设计精粹》,日前已经在中国翻译出版。去年底出版社找到我时,读完英文原著最终还是放弃了翻译,推荐给了其他同事,并告诉他们出版后准备接受炮火洗礼…

DDD之上下文映射图(Context Mapping)

领域驱动设计系列文章,点击上方合集↑ 1. 开头 在DDD中,限界上下文与限界上下文之间需要相互集成,这种集成关系在DDD中称为上下文映射(Context Mapping),也就是子域与子域之间的集成关系。 所以首先我们…

再谈领域驱动设计

本文从需求分析到API设计,试图描述领域驱动设计的过程及思想。同时也能看的出领域驱动设计并不是孤立存在的,它为解决开发团队和业务人员之间沟通而生,进而驱动微服务的划分以及API的设计。 作为一个领域驱动设计的实践者,我切实感…

用个十百千思考DDD

商业模式或者软件设计模式正确,不代表必然成功。你需要把时间轴纬度,也就是“趋势和方向”加入到思考系统中。具体怎么做,可以用“个十百千思考法“。时代是千位,战略是百位,治理是十位,管理是个位。DDD (领…

DDD 中的几个困难问题

领域到底是什么? 对领域这个词的理解就是 DDD 入门的第一个难关。我们有时会被客户问到,领域到底是什么?首先要清晰地知道领域是什么,才能划分核心域、支撑域和通用域。换句话说,构成领域的要素是什么呢? …

端口和适配器架构——DDD好帮手

摘要 本文源自2018领域驱动设计中国峰会《领域驱动设计与演进式架构专题》的Session之一,是其博客版在实践领域驱动设计时,可以挑选一些方法互为参照,端口和适配器架构概念简单,容易掌握,适合作为实践领域驱动设计的辅…

【领域驱动设计】聚合

从战术设计上,DDD 最值得借鉴的就是聚合根 什么是聚合 将实体和值对象在一致性边界之内组合聚合 这里的一致性包括 1、业务概念的完整性 2、业务规则的一致性:多个实体需要在一次操作中保持某种一致性(修改 A,同步必须修改 B&a…

实例——领域驱动设计DDD

简单总结下在项目中DDD的应用过程。 基于 DDD 的微服务设计通常采用事件风暴方法。 通过事件风暴完成领域模型设计,划分出微服务逻辑边界和物理边界,定义领域模型中的领域对象,指导微服务设计和开发。 这里的重点,是根据领域划分…

领域驱动设计之我见-实现模式

领域驱动设计,这个名词从字面上来看分为三个部分,领域,设计,驱动。前面我针对领域做了一些叙述,总结起来就是一句话:技术专家和业务专家一起采用面向对象的思想来提取业务模型。那么接下来要看设计了&#…

领域驱动设计之我见-领域建模

前面两节絮絮叨叨重点讲了一句话:领域驱动设计的核心在领域模型,领域建模核心在精通领域业务。那么该如何做好领域建模呢?需要精通的能力都没有捷径可走,但是也不是没有方法可循,下文就领域业务和建模两方面做一下讲解…

领域驱动设计之我见-面向对象思维

领域驱动设计之我见-面向对象思维 公司最近在推动研发体系员工技能图谱学习,其中对技术经理有一项基本要求是领域建模能力。关于领域驱动设计,埃文斯前辈出版过一本书《领域驱动设计:软件核心复杂性应对之道》,想必大多软件工程师…

DDD的哲学意味(上)

最近有小伙伴在Thoughtworks DDD社区中提起了有关哲学的话题,这在我这个哲学民科(下文简称“哲民”)的心中激起了阵阵涟漪。 据小道消息,Eric Evans认为DDD不是一种方法学,而是一种软件开发的思想和哲学。言下之意&am…

威胁建模——围绕假想敌的领域建模

威胁建模是一个帮助识别列举潜在威胁,并确定缓解措施的优先级,让安全实践左移的过程方法(例如架构缺陷漏洞或缺乏适当的保护措施)。 威胁建模的目的是为防御者提供系统分析,分析需要包含哪些控制或防御措施&#xff0…

DDD落地,如何持久化融合

理解聚合 聚合是一组始终需要保持一致的业务对象。因此,我们作为一个整体保存和更新聚合,以确保业务逻辑的一致性。 聚合是 DDD 中最为重要的概念,即使你不使用 DDD 编写代码也需要理解这一重要的概念 —— 部分对象的生命周期可以看做一个…

DDD的终极大招——By Experience

以DDD思想和微服务架构为代表的新的架构时代正在逐步形成,不同方法和工具的涌现让人激动不已,同时这个过程也让人感觉到些许的不安,因为没有一套方法和一套架构能够打遍天下,我们能明确告诉所有组织和团队的,也只是架构…

使用CDC模式改造遗留系统

项目改造背景及挑战 在我们经历的各种遗留系统改造之旅中,使用**绞杀者模式**来改造一个巨大的单体服务,是一种被广泛采用且验证行之有效的手段,在应用传统的绞杀者模式时,通常采用逐步替换的方式,将遗留系统中某一独…

【DDD】学习笔记-领域实现模型

实现模型与编码质量 领域设计模型体现了类的静态结构与动态协作,领域实现模型则进一步把领域知识与技术实现连接起来,但同时它必须守住二者之间的边界,保证业务与技术彼此隔离。这条边界线应由设计模型明确给出,其中的关键是遵循…

DDD诊所——异步事件综合征

【按】“DDD诊所”是Thoughtworks DDD社区的一项活动,通过对同事们在实施DDD过程中遇到的问题进行分析和解答,共同提高开发水平。我们将其中一些典型案例整理成文供大家参考。之后也会考虑在适当的时候将这一形式对外部开放。 就诊日期:2021…

使用函数式语言建立领域模型

领域模型代码 如果说敏捷软件开发主张面对面沟通,通过快速迭代的手段,让有价值的软件尽早面向市场,从而适应快速变化的需求。 那么DDD则为敏捷开发过程中的沟通形式,作出了进一步的补充。纵观DDD的所有环节,无一不是在…

【DDD】学习笔记-发布者—订阅者模式

在领域设计模型中引入了领域事件,并不意味着就采用了领域事件建模范式,此时的领域事件仅仅作为一种架构或设计模式而已,属于领域设计模型的设计要素。在领域设计建模阶段,如何选择和设计领域事件,存在不同的模式&#…

DDD实现之路

编者按:这篇文章最早撰写于2014年,作者也是《实现领域驱动设计》的译者。几年过去了,DDD在坊间依然方兴未艾,然而它的复杂性所引发的误解也层出不穷。对于一些基本概念的澄清甚至溯源,会帮助我们回到起点,对…

领域驱动设计之我见-领域业务

谈到领域驱动设计(DDD),人们很容易想到如下这张图,那么是不是你的软件做了如下的分层设计就是领域驱动设计的了?显然不是,以下分层只能说明的软件做了分层架构,领域驱动设计的核心在领域模型&am…

DDD之领域(Domain)和子域(Subdomain)

领域驱动设计系列文章,点击上方合集↑ 1. 领域 领域(Domain)是一个组织所做的事情以及其中所包含的一切,领域可以表示整个业务系统。 领域,简单来说,是指一个业务或行业领域,例如电商、社交媒…

【DDD】学习笔记-上下文映射的通信集成模式

无论采用何种设计,限界上下文之间的协作都是不可避免的,应用边界的上下文映射模式会以更加积极的态度来应对这种不可避免的协作;从设计的角度来讲,就是不遗余力地降低限界上下文之间的耦合关系。防腐层与开放主机服务的目的正是如…

【DDD】学习笔记-领域模型与结构范式

领域模型与建模范式 即使采用领域模型驱动设计,针对同一个领域获得的领域模型也会千差万别,除了因为设计能力、经验及对现实世界的理解不一致外,对模型产生根本影响的是建模范式(Modeling Paradigm)。 “范式&#x…

《软件方法(下)》第8章2023版连载(02)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.1.5 重视分析工作流 分析,就是从核心域的视角构思系统的内部机理。 在现在的很多软件组织中,分析工作流的技能被严重忽视。很多开发人员上手就直接编码&…

【DDD】学习笔记-数据模型与对象模型

在建立数据设计模型时,我们需要注意表设计与类设计之间的差别,这事实上是数据模型与对象模型之间的差别。 数据模型与对象模型 我们首先来分析在设计时对冗余的考虑。前面在讲解数据分析模型时就提及,在确定数据项模型时,需要遵…

领域驱动设计:基于DDD的微服务设计实例

文章目录 项目基本信息战略设计战术设计后续的工作 用一个项目来了解 DDD 的战略设计和战术设计,走一遍从领域建模到微服务设计的全过程,一起掌握 DDD 的主要设计流程和关键 点。 项目基本信息 项目的目标是实现在线请假和考勤管理。功能描述如下&…

使用 DDD 指导微服务拆分的逻辑

对于服务拆分的逻辑来说,是先设计高内聚低耦合的领域模型,再实现相应的分布式系统。服务的划分有一些基本的方法和原则,通过这些方法能让微服务划分更有操作性。最终在微服务落地实施时也能按图索骥,无论是对遗留系统改造还是全新…

DDD领域驱动设计

一、背景 在 DDD领域驱动设计中, DDD架构师负责定义出领域模型,而领域专家负责将领域模型转换为具体的软件系统。 对于传统的面向对象(OOP)架构来说,为了适应新的软件技术和新的业务需求,系统通常需要重新…

《软件方法》2023版第1章(10)应用UML的建模工作流-大图

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 1.4 应用UML的建模工作流 1.4.1 概念 我用类图表示建模工作流相关概念如图1-16。 图1-16 建模工作流相关概念 图1-16左侧灰色部分定义了“游戏规则”,右侧则是在“游戏规…

【DDD】学习笔记-限界上下文对架构的影响

通信边界对架构的影响 限界上下文的通信边界会对系统的架构产生直接的影响,在此之前,我们需要理清几个和边界有关的概念。如前所述,我提出了限界上下文的通信边界的概念,并将其分为进程内通信与进程间通信两种方式。在 Toby Clem…

DDD 参考工程架构

1 背景 不同团队落地DDD所采取的应用架构风格可能不同,并没有统一的、标准的DDD工程架构。有些团队可能遵循经典的DDD四层架构,或改进的DDD四层架构,有些团队可能综合考虑分层架构、整洁架构、六边形架构等多种架构风格,有些在实…

基于grpc从零开始搭建一个准生产分布式应用(6) - 06 - MapStruct常见问题汇总

1、Unknown property "discount" in result type TestMixBO. Did you mean "null"?可能有以种原因: 属性名写错了;maven中的编译插件中lombok的配置配置在了mapstrut之后,导致lombok注解没有执行; 2、Unkno…

领域驱动设计:DDD重构中台业务模型

文章目录 如何避免重复造轮子?如何构建中台业务模型? 如何避免重复造轮子? 要避免重复建设,就要理解中台的理念和思想。“中台是企业级能力复用平台”,“复用”用白话说就是重复使用,就是要避免重复造轮子…

要做一个关于DDD的内部技术分享,记录下用到的资源,学习笔记(未完)

最后更新于2023年3月10日 14:28:08 问题建模》软件分层》具体结构,是层层递进的关系。有了问题建模,才能进行具体的软件分层的讨论,再有了分层,才能讨论在domain里面应该怎么实现具体结构。 1、问题建模:Domain、Mod…

你的医书是假的!批评付施威的《DDD诊所——聚合过大综合症》

DDD领域驱动设计批评文集 “软件方法建模师”不再考查基础题 《软件方法》各章合集 一、说在前面 这两天在“ Thoughtworks洞见”公众号上看到一篇付施威的《DDD诊所——聚合过大综合症》。 相对于DDD圈子各种各样错误百出的玄学文章,这篇《DDD诊所》已经算是想…

【DDD】学习笔记-实体定义

“实体(Entity)”这个词被我们广泛使用,甚至被我们过分使用。设计数据库时,我们用到实体,例如《数据模型资源手册》就说:“实体是一个重要的概念,企业希望建立和存储的信息都是关于实体的信息。…

【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系)

一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系) 前言介绍降低沟通成本问题:各自建立属于自己领域/层面的语言标准解决方案1:专业术语转换为接地气的话术解决方案2:用简单的案例和背景信息进行描…

领域驱动应用架构实践

一个合适的应用架构不仅能促使项目朝着好的方向发展,易于维护,也能指导团队成员有效协作。 DDD是站在领域的角度来驱动应用架构的落地,接下来将介绍一种落地方案。 架构分层 首先在架构层次方面,在遵循DDD的分层架构模式的同时&…

因为做了这样的项目,成为了offer收割机!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 文章目录 一、项目视图二、学习路线1. 实习生2. 校招生3. 社招生 四、目标路径五、项目组合 注意:小傅哥的星球&…

F#奇妙游(28):ADT中简单值的F#实现

简单值的ADT 在领域建模中,我们尝尝会遇到一些简单的值,比如人的名字、人的编号、物品的代码。如果过早进行程序设计,这些值很容易就会变成程序设计语言中的基本量,string、int这些,就比如人的标号和物品的编号&#…

【DDD】学习笔记-需求分析

背景:企业应用套件 企业应用套件(Enterprise Application Suite,EAS)是一个根据软件集团公司应用信息化的要求而开发的企业级应用软件。EAS 系统提供了大量简单、快捷的操作接口,使得集团相关部门能够更快捷、更方便、…

【DDD】学习笔记-领域驱动分层架构与对象模型

领域驱动设计中分层架构的演化,最终得到了如下图所示的领域驱动分层架构: 如果采用对象范式,那么,分层架构每一层的对象模型应该如何设计呢?由于分层架构属于解决方案域中的设计方案,故而逻辑分层中的对象模…

【DDD】学习笔记-代码模型的架构决策

代码模型属于软件架构的一部分,它是设计模型的进化与实现,体现出了代码模块(包)的结构层次。在架构视图中,代码模型甚至会作为其中的一个视图,通过它来展现模块的划分,并定义运行时实体与执行视…

【DDD】学习笔记-场景驱动设计与 DCI 模式

思维模式与设计方法 对象是强调行为协作的,但对象自身却是对概念的描述。一旦我们将现实世界映射为对象,由于行为需要正确地分配给各个对象,于是行为就被打散了,缺少了领域场景的连续性。场景驱动设计引入“分解任务”的方法&…

【DDD】学习笔记-数据分析模型

在 Eric Evans 提出领域驱动设计之前,对企业系统的分析设计多数采用数据模型驱动设计。如前所述,这种数据模型驱动设计就是站在数据的建模视角,逐步开展分析、设计与实现的建模过程。通过对数据的正确建模,设计人员就可以根据模型…

京东云开发者DDD妙文欣赏(2)报菜名和化繁为简的创新

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 京东云开发者原文链接:DDD落地实践-架构师眼中的餐厅>>,以下简称《餐厅》。 我截图时,阅读量有6044,在同类文章中已经算是热文了…

DDD概念理解

1、统一语言:通过团队交流、达成共识的、能够准确传递业务规则的、简单:语音 特点:通用、简单、无歧义 价值:解决了沟通障碍问题,使领域专家和开发人员协同合作 2、领域模型:把通用语言表达成软件模型 特点…

如何选择UMLChina服务

服务口号:聚焦最后一公里 斐力庇第斯从马拉松跑回雅典报信,虽然已是满身血迹、精疲力尽,但他知道:没有出现在雅典人民面前,前面的路程都是白费。 学到的知识如果不能最终【用】于您自己的项目之中,也同样是…

DDD技术方案落地实践 | 京东云技术团队

1. 引言 从接触领域驱动设计的初学阶段,到实现一个旧系统改造到DDD模型,再到按DDD规范落地的3个的项目。对于领域驱动模型设计研发,从开始的各种疑惑到吸收各种先进的理念,目前在技术实施这一块已经基本比较成熟。在既往经验中总…

设计模式学习笔记 - 面向对象 - 8.实践:贫血模型和充血模型的原理及实践

1.Web开发常用的贫血MVC架构违背OOP吗? 前面我们依据讲过了面向对象四大特性、接口和抽象类、面向对象和面向过程编程风格,基于接口而非实现编程和多用组合少用继承设计思想。接下来,通过实战来学习如何将这些理论应用到实际的开发中。 大部…

【DDD】学习笔记-实体和值对象:从领域模型的基础单元看系统设计

今天我们来学习 DDD 战术设计中的两个重要概念:实体和值对象。 这两个概念都是领域模型中的领域对象。它们在领域模型中起什么作用,战术设计时如何将它们映射到代码和数据模型中去?就是我们这一讲重点要关注的问题。 另外,在战略…

《软件方法》第1章2023版连载(04)不了解ABCD工作流的危害

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 1.2 建模工作流 1.2.4 不了解ABCD的危害 1.2.4.1 思维颠倒 如果软件开发人员对以上的“A-业务建模”、“B-需求”、“C-分析”、“D-设计”工作流没有概念,就会把软件开…

DDD 架构分层,MQ消息要放到那一层处理?

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 本文的宗旨在于通过简单干净实践的方式教会读者,使用 Docker 配置 RocketMQ 并在基于 DDD 分层结构的 SpringBoot 工…

京东云开发者DDD妙文欣赏(3)你猜,用例为啥有个“用(use)”字?

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 京东云开发者DDD妙文欣赏(1-2)报菜名和化繁为简的创新>> 图8 《餐厅》中的“用例图” (01) 原文 用例图 赏析 揉一揉眼睛仔细…

【DDD】学习笔记-领域驱动设计对持久化的影响

资源库的实现 如何重用资源库的实现,以及如何隔离领域层与基础设施层的持久化实现机制,具体的实现还要取决于开发者对 ORM 框架的选择。Hibernate、MyBatis、jOOQ 或者 Spring Data JPA(当然也包括基于 .NET 的 Entity Framework、NHibernat…

领域驱动设计:微服务的设计原则和演进策略

文章目录 微服务的演进策略不同场景下的领域建模策略DDD 使用的误区微服务设计原则微服务拆分需要考虑哪些因素? 微服务的演进策略 在从单体向微服务演进时,演进策略大体分为两种:绞杀者策略和修缮者策略。 1. 绞杀者策略 绞杀者策略是一种…

DDD领域驱动设计-视频讲解+实战

目录 简介 解决的问题 过度耦合 现状 DDD的分层架构和构成要素 小结 分包应用 DDD领域驱动设计:实体、值对象、聚合根 DDD应用 战略建模 领域 限界上下文 需求分析 上下文映射图 战术建模——细化上下文 DDD工程实现 最终数据流向 简介 DDD 领域驱…

[图解]DDD领域驱动设计伪创新-通用语言06

82 00:03:24,860 --> 00:03:28,880 所以为什么很多DDD都是在什么 83 00:03:29,290 --> 00:03:32,310 很多这种通俗易懂的领域 84 00:03:33,710 --> 00:03:36,060 生活上的互联网这种 85 00:03:36,710 --> 00:03:38,982 很多DDD什么的大行其道 86 00:03:38,982 …