作品简介

本书是拥有二十年商业软件开发经验及十年技术管理经验的资深技术专家呕心沥血之作,也是目前市场上少有的阐述如何通过使用领域专用语言(DSL)实现领域驱动设计(DDD)的图书。

书中首先带领读者重温DDD在战术设计层面及战略设计层面上的部分重要概念,并简要介绍了自DDD社区兴起的一些软件架构模式。然后阐述如何设计一门DDD原生的DSL,包括这个DSL的规范支持哪些特性、如何帮助团队描述领域模型的方方面面、这些特性的选择基于何种考量等。然后在此基础上详细讲解了如何使用技术工具将描述领域模型的DSL文档直接转化为可以工作的软件代码,在这个过程中结合诸多来自商业软件开发工作中的真实案例,展示并分析了大量的关键代码,让读者可以深入地了解制造那些基于DSL的DDD技术工具的秘密。之后讲述了一些建模案例,并探讨了一些与DDD相关的其他话题,对读者开拓技术思维、更深刻地理解DDD有所助益。

杨捷锋,曾就职于南开戈德集团、普天集团、通路快建等公司。曾作为独立技术顾问为海尔集团、沈阳飞机工业集团、上广电NEC、天马微电子等企业提供软件开发与技术咨询服务。目前在一家电商创业公司担任技术负责人。有多个大型企业应用软件的分析建模经验,以及大型开发框架(ORM、IoC等)的架构经验。多年来一直未脱离软件开发一线工作,近年来自认为对软件系统分析、数据建模、领域驱动设计、项目管理略有心得。

作品目录

  • 前言
  • 第一部分 概念
  • 第1章 DDD的关键概念
  • 1.1 自顶而下、逐步求精
  • 1.2 什么是领域模型
  • 1.3 战术层面的关键概念
  • 1.4 战略层面的关键概念
  • 1.5 ER模型、OO模型和关系模型
  • 1.6 概念建模与模型范式
  • 第2章 其他DDD相关概念
  • 2.1 领域ID
  • 2.2 ID、Local ID与Global ID
  • 2.3 命令、事件与状态
  • 第3章 CQRS与Event Sourcing
  • 3.1 命令查询职责分离
  • 3.2 事件溯源
  • 3.3 From-Thru模式
  • 3.4 CQRS、ES与流处理
  • 第二部分 设计
  • 第4章 DDD的DSL是什么
  • 4.1 为什么DDD需要DSL
  • 4.2 需要什么样的DSL
  • 4.3 DDDML——DDD的DSL
  • 4.4 DDDML示例:Car
  • 第5章 限界上下文
  • 5.1 DDDML文档的根结点下有什么
  • 5.2 限界上下文的配置
  • 5.3 名称空间
  • 5.4 关于模块
  • 第6章 值对象
  • 6.1 领域基础类型
  • 6.2 数据值对象
  • 6.3 枚举对象
  • 第7章 聚合与实体
  • 7.1 用同一个结点描述聚合及聚合根
  • 7.2 实体之间只有一种基本关系
  • 7.3 关于实体的ID
  • 7.4 不变的实体
  • 7.5 动态对象
  • 7.6 继承与多态
  • 7.7 引用
  • 7.8 基本属性与派生属性
  • 7.9 约束
  • 7.10 提供扩展点
  • 第8章 超越数据模型
  • 8.1 实体的方法
  • 8.2 记录业务逻辑
  • 8.3 领域服务
  • 8.4 在方法定义中使用关键字inheritedFrom
  • 8.5 方法的安全性
  • 第9章 模式
  • 9.1 账务模式
  • 9.2 状态机模式
  • 9.3 树结构模式
  • 第三部分 实践
  • 第10章 处理限界上下文与值对象
  • 10.1 项目文件
  • 10.2 处理值对象
  • 第11章 处理聚合与实体
  • 11.1 生成聚合的代码
  • 11.2 Override聚合对象的方法
  • 11.3 处理继承
  • 11.4 处理模式
  • 第12章 处理领域服务
  • 12.1 处理数据的一致性
  • 12.2 发布与处理领域事件
  • 12.3 支持基于编制的Saga
  • 第13章 RESTful API
  • 13.1 RESTful API的最佳实践
  • 13.2 聚合的RESTful API
  • 13.3 服务的RESTful API
  • 13.4 身份与访问管理
  • 13.5 生成Client SDK
  • 第14章 直达UI
  • 14.1 两条路线的斗争
  • 14.2 生成Admin UI
  • 第四部分 建模漫谈与DDD随想
  • 第15章 找回敏捷的软件设计
  • 15.1 重构不是万能灵药
  • 15.2 数据建模示例:订单的装运与支付
  • 15.3 中台是一个轮回
  • 15.4 实例化需求与行为驱动测试
  • 15.5 要领域模型驱动,不要UI驱动
  • 15.6 不要用“我”的视角设计核心模型
  • 15.7 我们想要的敏捷设计
  • 第16章 说说SaaS
  • 16.1 何为SaaS
  • 16.2 多租户技术
  • 16.3 构建成功的SaaS有何难
  • 16.4 SaaS需要DDD
  • 第17章 更好的“锤子”
  • 17.1 我们制作的一个DDDML GUI工具
  • 17.2 以统一语言建模
  • 附录 DDDML示例与缩写表
展开全部