前 言
写下本书第一个字的具体时间已不可考。从文档创建的时间看,本书的写作至少可以追溯到2017年11月,屈指算来,三载光阴已逝。为了本书,我已算得上呕心沥血。回想这三年多时光,无论是在万米高空的飞行途中,还是在蔚蓝海边的旅行路上,抑或工作之余正襟危坐于书桌之前,我的心弦一刻不敢放松,时刻沉思体系的构建,纠结案例的选择,反复推敲文字的运用。我力求输出最好的内容,希望打造领域驱动设计技术书籍的经典!
我在ThoughtWorks的前同事滕云开我的玩笑:“老人家,你写完这本书,也就功德圆满了!”“老人家”是我在ThoughtWorks的诨名。我虽然对此称呼一直敬谢不敏,不过写作至今,我已心力交瘁,被称作“老人家”,也算“名副其实”了。至于是否“功德圆满”,就要交给读者诸君来品评了。
本书内容主要来自我在GitChat发布的课程“领域驱动设计实践”。该课程历经两年打造,完成于2020年1月21日。当时的我,颇有感慨地写下如此后记:
课程写作结束了。战略篇一共34章,约15.5万字;战术篇一共71章,约35.1万字。合计105章,50.6余万字,加上2篇访谈录、2篇开篇词与这篇可以称为“写后感”的后记,共110章。如此成果也足可慰藉我为之付出的两年多的艰辛时光!
我对“领域驱动设计实践”课程的内容还算满意,然而,随着我对领域驱动设计的理解的蜕变与升华,我的“野心”也在不断膨胀,我不仅希望讲清楚应该如何实践领域驱动设计,还企图对这套方法体系进行深层次的解构。这也是本书书名《解构领域驱动设计》的由来。
所谓“解构”,就是解析与重构:
- 解析,就是要做到知其然更知其所以然;
- 重构,则要做到青出于蓝而胜于蓝。
我钦佩并且尊敬Eric Evans对领域驱动设计革命性的创造,他对设计的洞见让我尊敬不已。尤其在彻底吃透限界上下文的本质之后,微服务又蔚然成风,我更加佩服他的远见卓识。然而,尊敬不是膜拜,佩服并非盲从,在实践领域驱动设计的过程中,我确实发现了这套方法体系天生的不足。于是,我在本书中提出了我的GitChat课程不曾涵盖的领域驱动设计统一过程(domain-driven design unified process,DDDUP),相当于我站在巨人Eric Evans的肩膀上,构建了自己的一套领域驱动设计知识体系。
领域驱动设计统一过程的提出,从根基上改变了本书的结构。我调整和梳理了本书的写作脉络,让本书呈现出与“领域驱动设计实践”课程迥然有别的全新面貌。本书不再满足于粗略地将内容划分为战略篇和战术篇,而是在领域驱动设计统一过程的指导下,将该过程的3个阶段——全局分析、架构映射和领域建模作为本书的3个核心篇,再辅以开篇和融合,共分为5篇(20章)和4个附录,全面而完整地表达了我对领域驱动设计的全部认知与最佳实践。在对内容做进一步精简后,本书仍然接近600页,算得上是软件技术类别的大部头了。
该如何阅读这样一本厚书呢?
若你时间足够充裕,又渴望彻底探索领域驱动设计的全貌,我建议还是按部就班、循序渐进地进行阅读。或许在阅读开篇的3章时,你会因为太多信息的一次性涌入而产生迷惑、困扰和不解,这只是因为我期望率先为读者呈现领域驱动设计的整体面貌。在获得领域驱动设计的全貌之后,哪怕你只是在脑海中存留了一个朦胧的轮廓,也足以开启自己对设计细节的理解和认识。
若你追求高效阅读,又渴望寻求领域驱动设计问题的答案,可以根据目录精准定位你最为关心的技术讲解。或许你会失望,甚至产生质疑,从目录中你获得了太多全新的概念,而这些概念从未见于任何一本领域驱动设计的图书,这是因为这些概念都是我针对领域驱动设计提出的改进与补充,是我解构全新领域驱动设计知识体系的得意之笔——要不然,一本技术图书怎么会写三年之久呢?
我将自鸣得意的开创性概念一一罗列于此。
- 业务服务。业务服务是全局分析的基本业务单元,在统一语言的指导下完成对业务需求的抽象,既可帮助我们识别限界上下文,又可帮助开发团队开展领域分析建模、领域设计建模和领域实现建模。业务服务的粒度也是服务契约的粒度,由此拉近了需求分析与软件设计的距离,甚至可以说跨越了需求分析与软件设计的鸿沟。
- 菱形对称架构。虽然菱形对称架构脱胎于六边形架构与整洁架构,但它更为简洁,与限界上下文的搭配可谓珠联璧合,既保证了限界上下文作为基本架构单元的自治性,又融入了上下文映射的通信模式,极大地丰富了设计要素的角色构造型。
- 服务驱动设计。服务驱动设计采用过程式的设计思维,却又遵循面向对象的职责分配,能在提高设计质量的同时降低开发团队的设计门槛,完成从领域分析模型到领域实现模型的无缝转换,并可作为测试驱动开发的前奏,让领域逻辑的实现变得更加稳健而高效。
以上概念皆为领域驱动设计统一过程的设计元素,又都能与领域驱动设计的固有模式有机融合。对软件复杂度成因的剖析,对价值需求和业务需求的划分,在领域驱动设计统一过程基础上建立的能力评估模型与参考过程模型,提出的诸多新概念、新方法、新模式、新体系,虽说都出自我的一孔之见,但也确乎来自我的一线实践和总结,我自觉其可圈可点。至于内容的优劣,还是交给读者评判吧。
若读者在阅读本书时有任何意见与反馈,可关注我的微信公众号“逸言”与我取得联系,我也会在公众号上发布后续我对领域驱动设计体系的更多探索与思考,也欢迎读者加入我的知识星球“NoDDD”,与我共同探讨软件技术的二三事。
照例给出致谢!
感谢GitChat创始人谢工女士,没有她的支持与鼓励,就不会有“领域驱动设计实践”课程的诞生,自然也就不会让我下定决心撰写本书。感谢人民邮电出版社异步图书的杨海玲女士,她没有因为错过最好的出版时机而催促我尽快交稿,她的宽容与耐心使我有足够充裕的时间精心打磨本书的内容。感谢本书的责任编辑刘雅思以及异步图书的其他素未谋面的幕后工作者,是他们认真严谨地保障了本书顺利走完“最后一公里”,抵达终点。感谢京东周吉鑫、AWS高翊凯(Kim Kao)、腾讯王立与技术专家于君泽(花名“右军”)诸兄的抬爱,他们不仅拨冗为我的著作作序,也给了我许多好的建议与指点,提升了本书的整体质量。感谢老东家ThoughtWorks的徐昊、王威、肖然、滕云、杨云等同事,他们曾经是我同一战壕的战友,在写书过程中,我也得到了他们的鼎力相助。感谢阿里的彭佳斌(花名“言武”)、自主创业人张闯、中航信杨成科、工商银行劳永安,四位兄台作为试读本书的第一批读者,花费了大量时间认真阅读了我的初稿,提出了非常宝贵的反馈意见,帮助我订正了不少错误。感谢我的领域驱动设计技术交流群的近1600名群友,他们的耐心等待以及坚持不懈的督促,使我能够坚持写完本书。
之所以“三年磨一剑”,是希望通过我的努力让本书的质量对得起读者!可是,对得起读者的同时,我却对不起我生命中最重要的两个人:我的妻子漆茜与儿子张子瞻。这三年我把大部分业余时间都用于写作这本书,多少个晚上笔耕不缀,妻子陪着儿子,我则陪着电脑,对此我深感愧疚。妻儿为了支持我的创作,没有怨怼,只有默默的支持,子瞻还为本书贡献了一幅美丽的插图。本书的出版,有他们一大半的功劳!最后,还要感谢我的父母,每次匆匆回家看望他们,都只有极短的时间和他们聊天,挤出来的时间都留给了本书的写作!
在写这篇前言的前一天,我偶然读到苏东坡的一首小词:
春未老,风细柳斜斜。试上超然台上看,半壕春水一城花。烟雨暗千家。
寒食后,酒醒却咨嗟。休对故人思故国,且将新火试新茶。诗酒趁年华。
蓦然内心被叩击,仿佛心弦被优美的辞章轻轻地带着诗意拨弄。吾身虽不能上超然台,然而书成之后,可否看到半壕春水一城花?未曾饮酒,却咨嗟,是否多情笑我早生华发?如今的我,已然焙出新火,恰当新火试新茶,却不知待到明年春未老时,能否做到何妨吟啸且徐行的落拓不羁?无论如何,还当诗酒趁年华——仰天大笑出门去,吾辈岂是蓬蒿人!
张逸
于公元2020年11月24日夜
时旅居北京顺义区蓝天苑