深入实践DDD 以DSL驱动复杂软件开发
新华书店全新正版,极速发货,假一罚十,可开电子发票,请放心购买。
¥
53.91
5.4折
¥
99
全新
库存16件
作者杨捷锋
出版社机械工业出版社
ISBN9787111677710
出版时间2021-04
装帧平装
开本16开
定价99元
货号1202328231
上书时间2024-10-12
商品详情
- 品相描述:全新
- 商品描述
-
目录
部分概念
章DDD的关键概念2
1.1自顶而下、逐步求精3
1.1.1DDD开创全新分析流派3
1.1.2什么是软件的核心复杂性4
1.2什么是领域模型4
1.3战术层面的关键概念6
1.3.1实体6
1.3.2值对象6
1.3.3聚合与聚合根、聚合内部实体7
1.3.4聚合的整体与局部9
1.3.5聚合是数据修改的单元9
1.3.6聚合分析是“拆分”的基础10
1.3.7服务12
1.4战略层面的关键概念13
1.4.1限界上下文13
1.4.2限界上下文与微服务14
1.4.3防腐层15
1.4.4统一语言18
1.5ER模型、OO模型和关系模型19
1.6概念建模与模型范式21
第2章其他DDD相关概念22
2.1领域ID22
2.1.1自然键与代理键23
2.1.2DDD实体的ID需要被最终用户看到23
2.1.3什么时候使用代理键24
2.2ID、LocalID与GlobalID26
2.3命令、事件与状态27
第3章CQRS与EventSourcing29
3.1命令查询职责分离29
3.2事件溯源32
3.3From-Thru模式33
3.3.1示例:ProductPrice33
3.3.2示例:PartyRelationship35
3.4CQRS、ES与流处理36
第二部分设计
第4章DDD的DSL是什么40
4.1为什么DDD需要DSL41
4.1.1为什么实现DDD那么难41
4.1.2搞定DDD的“锤子”在哪里42
4.2需要什么样的DSL43
4.2.1在“信仰”上保持中立44
4.2.2DDD原生45
4.2.3在复杂和简单中平衡46
4.2.4通过DSL重塑软件开发过程48
4.3DDDML——DDD的DSL48
4.3.1DDDML的词汇表49
4.3.2DDDML的Schema51
4.4DDDML示例:Car52
4.4.1“对象”的名称在哪里55
4.4.2使用两种命名风格:camelCase与PascalCase55
4.4.3为何引入关键字itemType56
第5章限界上下文57
5.1DDDML文档的根结点下有什么57
5.2限界上下文的配置59
5.3名称空间62
5.3.1再谈PascalCase命名风格62
5.3.2注意两个字母的首字母缩写词63
5.4关于模块64
第6章值对象67
6.1领域基础类型68
6.1.1例子:从OFBiz借鉴过来的类型系统70
6.1.2例子:任务的触发器73
6.2数据值对象75
6.3枚举对象76
第7章聚合与实体79
7.1用同一个结点描述聚合及聚合根79
7.2实体之间只有一种基本关系82
7.3关于实体的ID85
7.4不变的实体89
7.5动态对象90
7.6继承与多态92
7.6.1使用关键字inheritedFrom94
7.6.2超对象95
7.7引用97
7.7.1定义实体的引用97
7.7.2属性的类型与引用类型101
7.8基本属性与派生属性102
7.8.1类型为实体集合的派生属性103
7.8.2类型为值对象的派生属性106
7.9约束107
7.9.1在实体层面的约束107
7.9.2在属性层面的约束109
7.10提供扩展点110
第8章超越数据模型112
8.1实体的方法112
8.1.1聚合根的方法115
8.1.2非聚合根实体的方法116
8.1.3属性的命令117
8.1.4命令ID与请求者ID119
8.2记录业务逻辑119
8.2.1关于accountingQuantityTypes120
8.2.2关于derivationLogic120
8.2.3关于filter121
8.2.4使用关键字referenceFilter121
8.2.5业务逻辑代码中的变量122
8.2.6说说区块链123
8.3领域服务123
8.4在方法定义中使用关键字inheritedFrom125
8.5方法的安全性126
第9章模式128
9.1账务模式128
9.2状态机模式132
9.3树结构模式137
9.3.1简单的树137
9.3.2使用关键字structureType138
9.3.3使用关键字structureTypeFilter139
第三部分实践
0章处理限界上下文与值对象142
10.1项目文件143
10.2处理值对象144
10.2.1一个需要处理的数据值对象示例145
10.2.2使用Hibernate存储数据值对象146
10.2.3处理值对象的集合149
10.2.4在URL中使用数据值对象151
10.2.5处理领域基础类型153
1章处理聚合与实体161
11.1生成聚合的代码162
11.1.1接口163
11.1.2代码中的命名问题178
11.1.3接口的实现179
11.1.4事件存储与持久化207
11.1.5使用Validation框架218
11.1.6保证静态方法与模型同步更新220
11.1.7不使用事件溯源222
11.2Override聚合对象的方法223
11.3处理继承225
11.3.1TPCH226
11.3.2TPCC227
11.3.3TPS228
11.4处理模式229
11.4.1处理账务模式229
11.4.2处理状态机模式234
2章处理领域服务238
12.1处理数据的一致性239
12.1.1使用数据库事务实现一致性240
12.1.2使用Saga实现最终一致性241
12.2发布与处理领域事件243
12.2.1编写DDDML文档243
12.2.2生成的事件发布代码245
12.2.3编写生产端聚合的业务逻辑253
12.2.4实现消费端领域事件的处理254
12.3支持基于编制的Saga255
12.3.1编写DDDML文档255
12.3.2生成的Saga命令处理代码261
12.3.3需要我们编写的Saga代码268
12.3.4需要我们实现的实体方法273
3章RESTfulAPI276
13.1RESTfulAPI的最佳实践276
13.1.1没有必要绞尽脑汁地寻找名词277
13.1.2尽可能使用HTTP作为封包277
13.1.3异常处理279
13.2聚合的RESTfulAPI280
13.2.1GET280
13.2.2PUT291
13.2.3PATCH293
13.2.4DELETE295
13.2.5POST295
13.2.6事件溯源API296
13.2.7树的查询接口297
13.3服务的RESTfulAPI297
13.4身份与访问管理299
13.4.1获取OAuth2.0BearerToken299
13.4.2在资源服务器上处理授权301
13.5生成ClientSDK302
13.5.1创建聚合实例303
13.5.2更新聚合实例304
13.5.3使用Retrofit2306
4章直达UI308
14.1两条路线的斗争309
14.1.1前端“知道”领域模型309
14.1.2前端“只知道”RESTfulAPI312
14.2生成AdminUI312
14.2.1使用referenceFilter313
14.2.2展示派生的实体集合属性315
14.2.3使用属性层面的约束316
14.2.4使用UI层元数据317
14.2.5构建更实时的应用318
第四部分建模漫谈与DDD随想
5章找回敏捷的软件设计322
15.1重构不是万能灵药323
15.2数据建模示例:订单的装运与支付324
15.2.1订单与订单行项325
15.2.2订单与订单装运组327
15.2.3订单与装运单328
15.2.4订单的项目发货329
15.2.5订单的支付330
15.3中台是一个轮回332
15.4实例化需求与行为驱动测试334
15.4.1什么是实例化需求334
15.4.2BDD工具335
15.4.3BDD工具应与DDD相得益彰336
15.4.4不要在验收测试中使用固件数据336
15.4.5制造“制造数据”的工具337
15.5要领域模型驱动,不要UI驱动345
15.6不要用“我”的视角设计核心模型346
15.6.1让User消失347
15.6.2认识一下Party348
15.7我们想要的敏捷设计350
6章说说SaaS351
16.1何为SaaS351
16.2多租户技术352
16.3构建成功的SaaS有何难353
16.3.1多租户系统的构建成本353
16.3.2难以满足的定制化需求353
16.3.3负重前行的传统软件公司355
16.4SaaS需要DDD355
7章更好的“锤子”356
17.1我们制作的一个DDDMLGUI工具357
17.1.1给领域建模提供起点357
17.1.2创建新的限界上下文358
17.1.3从OFBiz中“借鉴”数据模型359
17.1.4构建项目并运行应用361
17.1.5使用HTTPPUT方法创建实体362
17.1.6给聚合增加方法363
17.1.7生成限界上下文的DemoAdminUI368
17.1.8让不同层级的开发人员各尽其能369
17.2以统一语言建模370
附录DDDML示例与缩写表373
内容摘要
本书是拥有二十年商业软件开发经验及十年技术管理经验的资深技术专家呕心沥血之作,也是目前市场上少有的阐述如何通过使用领域专用语言(DSL)实现领域驱动设计(DDD)的图书。书中首先带领读者重温DDD在战术设计层面及战略设计层面上的部分重要概念,并简要介绍了自DDD社区兴起的一些软件架构模式。然后阐述如何设计一门DDD原生的DSL,包括这个DSL的规范支持哪些特性、如何帮助团队描述领域模型的方方面面、这些特性的选择基于何种考量等。然后在此基础上详细讲解了如何使用技术工具将描述领域模型的DSL文档直接转化为可以工作的软件代码,在这个过程中结合诸多来自商业软件开发工作中的真实案例,展示并分析了大量的关键代码,让读者可以深入地了解制造那些基于DSL的DDD技术工具的秘密。之后讲述了一些建模案例,并探讨了一些与DDD相关的其他话题,对读者开拓技术思维、更深刻地理解DDD有所助益。
— 没有更多了 —
以下为对购买帮助不大的评价