1.书籍信息
封面 | ![]() |
---|---|
书名 | 《深入实践DDD:以DSL驱动复杂软件开发》 |
作者 | 杨捷锋 |
状态 | 已读完 |
简介 | 本书的第一部分会带领读者从战术层面以及战略层面重温领域驱动设计的重要概念,然后进一步阐述Eric Evans经典著作中没有显式提出的或者被太多人忽略的但我认为对DDD落地非常重要的若干概念,同时简要介绍从DDD社区兴起的一些软件架构模式。通过第一部分,读者可以更完整、更深刻地掌握DDD的知识体系。第二部分阐述如何设计一种DDD的DSL,包括这个DSL的规范(Specification)支持哪些特性、如何帮助团队描述领域模型的方方面面、这些特性的选择基于何种考量等。这种领域专用语言需要一个名字,我们总不能一直说“我设计的DDD的DSL”吧,于是我给它起了一个名字:DDDML。我认为这是一个很棒的名字。其实这种语言叫什么并不太重要,重要的是它可以用一种足够严格的方式描述领域模型。我认为目前它在简单与复杂之间取得了不错的平衡。当然,其中还有不小改进的空间。比如,我很乐意让它支持更多像“账务模式”这样的分析模式。第三部分介绍如何将“思想照进实现”——通过使用工具将描述领域模型的DSL文档变成可以运行的软件。这个过程涉及大量的技术工具(工具链)的设计与实现。只有将这些技术工具——比如从DSL自动生成应用的源代码的模板——实现出来,才能减轻开发人员实践DDD的负担,进而提升而不是降低软件团队的生产效率。本部分会介绍这些技术工具设计与实现的细节。 |
资源 | https://weread.qq.com/web/bookDetail/3f232740723b60233f23504 |
评价(满6颗) | 第一章不错,后面讲 DSL 的部分比较模糊,如果打算自己落地搞,可以借鉴,如果没打算搞,就不推荐看后面的了 ⭐⭐⭐ |
2.书摘
7个笔记
1.3.6 聚合分析是“拆分”的基础
这个可能说的有点窄了, 聚合也会划分对象和对象之间的协作关系范围,减少复杂度
总之,聚合分析的意义就是让开发人员一开始就在强一致性和最终一致性的选择上进行足够的思考和权衡,而不是没有想清楚就匆忙进入编码阶段。
1.4 战略层面的关键概念
什么叫作概念完整性?通俗地讲,就是所有人对领域内的所有事物持相同的看法。
2.3 命令、事件与状态
·命令:我(客户端)想要系统(服务端)干什么。命令应该使用动词或者动词性短语来命名。比如CreateOrder(创建订单)、Rename(重命名)等。·事件:已经发生的事实。事件应该以动词的过去分词形式命名。比如OrderCreated(订单已创建)、Renamed(已重命名)。·状态:系统现在或者某一刻是什么样子的。状态应该是名词,可以辅以State作为后缀。比如OrderState、PersonState。举个例子,我到银行去取款:·“我想要把我这张卡的钱全部取出来”——这是一个命令。·“先生,这是您的900元钱”——这是一个事件(客户已取款900元)。·“现在,您的账户余额为0元”——这是状态。
3.4 CQRS、ES与流处理
DDD社区关注的是“领域的复杂性”,数据分析只是其中一部分。DDD很大程度上是关于对象生命周期管理的艺术,或者说DDD是如何对(复杂的)状态进行有效管理的技巧。ES和CQRS兴起于DDD社区,它们的基因与流处理大不相同。它们的关注点不只在于OLAP(在线分析处理),更在于OLTP(在线事务处理)。
7.5 动态对象
7.5 动态对象 DDDML中所说的动态对象是指可以在运行时添加DDDML中未定义的属性的对象。这里的对象主要是指实体。至于值对象有没有必要也是“动态的”,笔者在实践中没有碰到这样的需求,所以DDDML中暂时不考虑支持声明值对象是动态的(isDynamic)。 这里说的“在运行时添加”,指的是想要给实体添加一个属性时,不需要修改DDDML文档,不需要重新生成或修改代码,不需要重新编译代码、部署应用,这个属性马上就可以使用。我们可以把这些在运行时添加的属性称为动态属性。
15.5 要领域模型驱动,不要UI驱动
很多软件的开发过程是这样的:产品经理分析需求,给出产品原型以及产品需求说明文档,然后召集开发人员和测试人员对需求进行评审,如果大家没有异议,开发就进入编码阶段。开发人员开始看着产品原型去做数据建模、决定数据库的Schema,编写业务逻辑层、UI层代码……在这个过程中几乎没有人去构建领域模型,大家直接从用户体验出发,“一步到位”开发出工作的软件。笔者把这样的开发模式叫作UI(用户界面)驱动开发。
点评
自然键和代理键
根据这个说法’我们可以认为’使用软件的最终用户所生活的世界就是现实世界’这 个世界没有代理键的容身之地°这么说来’代理键只应该活在技术人员的世界里?
′宫之’能不能见“人”(指的是最终用户)’是笔者能找到的用于区别自然键和代理键的 最不让人困惑的标准了。
3.读后感 & 点评
认为一般
1.第一章不错,后面讲 DSL 的部分比较模糊,如果打算自己落地搞,可以借鉴,如果没打算搞,就不推荐看后面的了
- DSL 是什么?(Domain-Specific Language,DSL)维基百科上是这么说的:领域专用语言(DSL)是面向特定的应用领域专门化的计算机语言。它与通用语言(GPL)相对应,后者广泛适用于不同的领域。
3.本书的作者实现了一套 DDD 的 DSL,在他公司也进行了实践落地,但是没有开源,我们看这本书可以借鉴参考,但是轮子得自己造
ps:没看完,后面实在看不下去了(前面讲了设计的 DSL 语言,后面讲基于此的具体例子,有点难理解)