新書推薦:
《
UE5虚幻引擎必修课(视频教学版)
》
售價:HK$
113.9
《
真需求
》
售價:HK$
113.9
《
阿勒泰的春天
》
售價:HK$
51.8
《
如见你
》
售價:HK$
52.7
《
人格阴影 全新修订版,更正旧版多处问题。国际分析心理学协会(IAAP)主席力作
》
售價:HK$
68.8
《
560种野菜野果鉴别与食用手册
》
售價:HK$
68.9
《
中国官僚政治研究(一部洞悉中国政治制度演变的经典之作)
》
售價:HK$
64.4
《
锂电储能产品设计及案例详解
》
售價:HK$
113.9
|
編輯推薦: |
为读者提供更加清晰的DDD知识脉络,各个击破、详细解析;
讲解过程伴随实例代码,让读者的学习过程更加轻松;
包含原著以外的DDD社区新发展,基于截至2020年初的全新、全面DDD思想方法体系编写;
推荐作为原著学习伴侣,在实践中反复学习与思考。
|
內容簡介: |
领域驱动设计简称DDD,《复杂软件设计之道:领域驱动设计全面解析与实战》前6章全面解析了DDD的分析方法和技术架构,包括领域驱动设计基础、领域驱动战略设计(有界上下文和统一语言)、聚合设计、实体和值对象、CQRS架构和事件溯源,第7章使用经典的货物运输系统案例进行了完整、详细的综合演示。
《复杂软件设计之道:领域驱动设计全面解析与实战》同时引入了DDD的最新发展成果,如事件风暴建模,并以此建模方式替代传统的DDD建模方式讲解了多个案例。还涉及大量软件系统实现相关的技术和架构,读者在学习DDD的同时,也可以掌握这些技术、架构在DDD实现中的灵活应用。
另外,每个概念或方法的讲解过程都穿插了具体实例,以方便读者结合实例进行学习;第2~7章每章*后都有总结与拓展,将本章涉及的案例和知识进行总结,并引入国际DDD专家的心得经验,试图告诉读者一条DDD实战中行之有效的途径。
《复杂软件设计之道:领域驱动设计全面解析与实战》主要面向拥有一定实践经验的软件产品经理、领域专家、软件设计开发相关从业人员,相关初级从业者也可阅读本书。
|
關於作者: |
作者彭晨阳,常用网名板桥(bang),DDD等软件架构专研网站——解道(Jdon)的创办者,长期关注国内外软件架构思想和设计开发的新动向,自DDD提出以来,持续研究与实践DDD。
行业经验——具有近30年的软件系统设计与开发经验,以及丰富的领域实战经验,包括ERP、电子商务、政务、电力、银行、大型游戏等。
培训经历——致力于传播软件设计开发新思想、新技术,曾为近百家企业提供培训咨询服务,包括华为、阿里等企业。
擅长方向——系统架构设计与实现,设计模式与框架,并发编程和微服务、区块链等分布式系统与事务。擅长复杂系统的软件架构和领域建模。
|
目錄:
|
前言
第1章领域驱动设计基础1
1.1领域驱动设计的起源与发展1
1.1.1程序员为难之处1
1.1.2技术负债与软件质量3
1.1.3ER数据建模与面向对象建模4
1.1.4DDD的诞生和发展6
1.2领域驱动设计的特点9
1.2.1发现和理解问题10
1.2.2领域即边界13
1.2.3解决复杂性15
1.2.4新的数据结构设计方式17
1.2.5需要注重产品的程序员18
1.3领域驱动设计的难点20
1.3.1业务策略和业务规则21
1.3.2统一语言与有界上下文25
1.3.3领域模型的提炼26
1.4领域驱动设计的应用场景29
1.4.1哪些应用不适合?30
1.4.2适合微服务架构30
第2章领域驱动战略设计31
2.1有界上下文31
2.1.1统一语言:统一项目中的交流
语言32
2.1.2如何发现有界上下文和统一
语言?34
2.1.3有界上下文之间的关系36
2.1.4核心子域、支持子域与通用
子域37
2.1.5实例解析:电费结算系统38
2.2按时间线发现有界上下文40
2.2.1UML时序图40
2.2.2实例解析:电商领域之商品管理
上下文41
2.3通过领域故事或流程发现有界
上下文45
2.4通过事件风暴会议发现有界
上下文48
2.4.1领域事件50
2.4.2命令51
2.4.3事件风暴建模法53
2.4.4实例解析:一个典型的事件风暴
建模议程56
2.5业务平台与中台设计60
2.6总结与拓展62
第3章聚合设计68
3.1聚合设计的概念68
3.1.1高聚合低关联71
3.1.2聚合的逻辑一致性74
3.2设计聚合的几种方法77
3.2.1改变主谓宾顺序78
3.2.2根据领域事件设计聚合79
3.2.3根据单一职责设计聚合81
3.2.4按时间边界设计聚合83
3.2.5通过事务边界设计聚合87
3.2.6通过ER模型设计聚合89
3.3实例解析:订单系统中的聚合
设计95
3.3.1信息拥有者模式97
3.3.2引用模式99
3.3.3奥卡姆剃刀原理100
3.3.4控制者模式101
3.3.5订单状态集中控制实现103
3.3.6做什么和怎么做的分离106
3.3.7在服务中验证聚合107
3.3.8Spring Boot实现110
3.4总结与拓展115
第4章实体和值对象121
4.1失血贫血模型121
4.2实体124
4.2.1实体的标识125
4.2.2实体的设计126
4.2.3实体对象的创建128
4.3值对象131
4.3.1值对象与实体的区别134
4.3.2用值对象重构138
4.4领域服务140
4.4.1领域服务的特征141
4.4.2领域服务与应用服务144
4.5仓储147
4.5.1自行实现仓储148
4.5.2结合Builder模式实现仓储151
4.6充血模型的设计原则154
4.6.1将公有setter方法变为私有155
4.6.2注重对象的构建157
4.7实例解析:论坛系统实体和
值对象设计159
4.7.1聚合根实体是什么?161
4.7.2值对象的设计164
4.7.3状态设计167
4.7.4发帖功能实现170
4.7.5双聚合根173
4.7.6分配职责行为176
4.7.7构建对象必须遵循唯一性179
4.8总结与拓展184
第5章CQRS架构186
5.1DDD架构介绍187
5.1.1MVC模式187
5.1.2传统三层架构188
5.1.3传统DDD分层架构191
5.1.4清洁架构194
5.1.5六边形架构198
5.1.6垂直切片架构201
5.2CQRS架构的特点203
5.3命令和查询分离205
5.3.1查询模型实现206
5.3.2命令模型实现210
5.3.3Command对象212
5.3.4命令和查询的协作216
5.4不同的数据访问方式219
5.4.1查询端存储实现220
5.4.2规格模式221
5.4.3命令与查询的同步224
5.5CAP定理226
5.6领域事件实现数据同步227
5.7实例解析:使用Axon框架
实现CQRS231
5.7.1命令端实现233
5.7.2查询端实现236
5.8总结与拓展237
第6章事件溯源241
6.1什么是事件溯源?242
6.2基于事件溯源的聚合根设计249
6.2.1用事件替代状态249
6.2.2活动与事件253
6.3事件溯源的优点260
6.3.1替代分布式事务261
6.3.2事件日志的顺序性263
6.3.3基于事件日志的消息系统265
6.4微服务中的分布式事务
实现266
6.4.1引入Saga模式267
6.4.2Saga分布式事务原理267
6.4.3实例解析:账户转账271
6.5使用Apache Kafka实现事件
溯源275
6.6投射模式280
6.7更改数据捕获(CDC)282
6.8总结与拓展285
第7章货物运输系统290
7.1领域描述290
7.2从流程中发现领域事件294
7.2.1受理流程295
7.2.2作业流程298
7.3概念挖掘301
7.3.1划分有界上下文302
7.3.2预订受理上下文304
7.3.3运输作业上下文306
7.4预订受理的聚合设计309
7.4.1聚合的发现和命名309
7.4.2聚合设计313
7.4.3状态设计316
7.4.4命令与事件设计317
7.4.5代码实现320
7.4.6设计和实现的差异325
7.5运输作业的聚合设计327
7.5.1命令、事件和聚合328
7.5.2有界上下文映射331
7.5.3聚合重构设计334
7.6总结与拓展336
|
內容試閱:
|
“领域驱动设计”一词源于Eric Evans在2004年出版的图书《Domain-Driven Design: Tackling Complexity in the Heart of Software》,而Eric Evans也因此被称为“领域驱动设计之父”。领域驱动设计简称DDD,它是面向对象、设计模式、函数式编程的集大成者,是软件设计发展的主要方向之一。DDD诞生十多年来一直处于高速发展中,其超前思想正在指引着企业软件技术的发展,清洁(Clean)架构、六边形架构、CQRS架构、事件溯源架构、微服务架构、无服务器架构等都与DDD有着紧密联系,DDD更是微服务架构实现的基础知识。
DDD是一种平衡业务和技术设计的方法学。通常,我们把产品经理或领域专家称为业务人员,把程序员称为技术人员,一套高质量的软件产品或项目需要两者合作才能完成,但是由于他们各自的领域背景不同,所以难以沟通和合作,而DDD则提供了一套业务建模与实现方法来消除两者间的隔阂。
为什么写这本书
写这本书的原因有二。
DDD中引入了上下文、聚合等难以理解或实践的概念,导致新手入门和使用比较难,而笔者自DDD出现以来,一直专注于其中,并在以jdon为主的分享平台上不断记录自己的使用心得和国外DDD的最新发展情况,所以编写此书,并且以国内软件设计人员更易理解的结构和语言对Eric Evans所著书中的抽象概念、建模方法进行了梳理和全面解析,以此作为多年沉淀的总结。这是原因之一。
自DDD出现以来,随着软件系统的日益复杂,其越发受到软件设计开发相关人员的重视,也得到了新的发展,比如事件溯源、事件风暴会议、失血贫血模型与充血模型。对DDD中术语的逐步统一和规范,与各种典型技术与架构的结合实现……这是笔者编写本书的原因之二,即梳理DDD的现有发展成果,包括与DDD相关的技术与架构。
这本书写给谁
本书主要面向拥有一定实践经验的软件产品经理、领域专家、软件设计开发相关从业人员,产品经理等业务专家可以着重阅读前三个章节。
如果你是一个软件开发新手或还是一个在校学生,也推荐你阅读本书,因为其中的软件设计开发思路与方法定能为你带来极大启发。
如何阅读本书
本书分为7章,首先从DDD的起源、发展、特点等方面出发,呈现了DDD的全貌,然后分别介绍了领域驱动战略设计、聚合设计、实体和值对象、CQRS架构、事件溯源,最后对DDD中经典的货物运输系统案例进行了完整、详细的讲解。
除了各章专门的实例解析外,每个概念或方法的讲解中都穿插了具体实例,读者可以结合实例来理解DDD,学习DDD模型从无到有的分析过程。此外,本书也提供了开放源码实现,还可通过书中的链接进行知识拓展。
本书采用Java语言来具体实现,并涉及大量软件系统实现相关的技术和架构,主要包括数据库、Spring Boot、微服务、分布式事务等,读者在学习DDD建模方法的同时,也可以掌握这些技术、架构在DDD等实现中的灵活应用。
本书主要内容
本书各章内容大致如下。
第 1 章是领域驱动设计基础,介绍了DDD的起源、发展、特点、难点、应用场景,其中对领域复杂性、领域边界、业务策略和业务规则、统一语言和有界上下文等DDD建模方法中的关键概念和过程进行了综述,让读者对DDD建模的总体方向和思路有一个了解。
第 2 章是领域驱动战略设计。领域驱动设计分为战略设计和战术设计两个部分,本章的战略设计从宏观角度进行领域的分析设计,主要讲解了有界上下文、统一语言及多种有界上下文发现方法,也包括对业务平台与中台设计、事件风暴会议的介绍。
第 3 章是聚合设计,属于设计代码阶段,是战术设计部分,它与实体、值对象等对象类型概念共同表达领域模型。本章在介绍聚合设计概念的基础上,又详细讲解了设计聚合的几种方法,包括改变主谓宾顺序、根据领域事件设计聚合、根据单一职责设计聚合、按时间边界设计聚合等,最后以订单系统为例进行了实战解析。
第 4 章是实体和值对象,包括对实体的标识、设计、创建以及值对象与实体的区别、用值对象重构等的描述,并介绍了失血贫血模型、充血模型、仓储,最后通过一个论坛系统对这些概念和过程进行了详细解析。
第 5 章是CQRS架构,基于对MVC模式、传统三层架构、传统DDD分层架构、清洁架构、六边形架构、垂直分片架构等的介绍与对比,主要讲解了CQRS架构的特点与实现,包括命令与查询分离、数据访问方式、数据同步等内容,最后是一个使用Axon框架实现CQRS架构的案例。
第 6 章是事件溯源,介绍了事件溯源的概念、优点与实现,具体包括基于事件溯源的聚合根设计、微服务中的分布式事务实现、使用Apache Kafka实现事件溯源、投射模式、更改数据捕获等内容。
第 7 章是货物运输系统。Eric Evans的DDD原著中,该案例被拆分到了不同章节,考虑初学者更希望看到完整的分析和实现过程,从而更好地将理论应用于实战,本章从领域描述、发现领域事件、划分有界上下文到聚合设计与代码实现,对货物运输系统的DDD建模过程进行了全面、详细的阐述。
致谢
感谢曾任IBM咨询顾问的陈庆春同行的支持;感谢这些年来为笔者提供DDD项目实践、培训和咨询机会的各大软件企业;感谢机械工业出版社提供出版机会。
最后,DDD的普及与发展
|
|