我的书《解构领域驱动设计》即将由人民邮电出版社异步社区出版,目前已经可以在出版社的官网预定,很快就能够在电商平台上架开售。历时近四年的写作委实不易,当然,也离不开各位朋友的支持与帮助。正如我在本书前言中提到的“感谢京东周吉鑫、AWS高翊凯(Kim Kao)、腾讯王立与技术专家于君泽(花名“右军”)诸兄的抬爱,他们不仅拨冗为我的著作作序,也给了我许多好的建议与指点,提升了本书的整体质量。”
为此,在这里我抢先发布这些朋友为本书写的推荐序,以飨读者。
推荐序一
本书的读者是幸运的!我运用领域驱动设计磕磕绊绊十余年,读过本书的内容之后,深感它是一本可与《领域驱动设计》和《实现领域驱动设计》互补的书,它在领域驱动设计落地方面尤其出色。
2007年,我阅读了Eric Evans的《领域驱动设计》。2014年,我又阅读了由Eric Evans作序、Vaughn Vernon编写的《实现领域驱动设计》,后来,我有幸认识了该书的审校者张逸老师,和张逸老师的沟通令我受益匪浅。虽然知道张逸老师在领域驱动设计方面功力颇深,但在拜读了张逸老师的这本书的初稿之后,我依然非常吃惊,觉得张逸老师真正做到了将领域驱动设计知识融会贯通。张逸老师在这本书中对限界上下文、聚合、领域服务概念进行了深刻阐述,并通过案例的运用让研发人员在使用这些概念时不再迷惑。他还在参透了六边形整洁架构、架构与分层架构的本质后,大胆突破,提出了精简的菱形对称架构,从架构角度让领域驱动设计更加容易理解和落地,并通过服务驱动设计,以任务分解的方式让测试驱动开发和领域驱动设计无缝结合,让设计可以推导验证,让开发人员可以自然而然写出不再“贫血”的代码。
本书不仅具备国内作者难得的宽阔视野和理论深度,而且有丰富的案例与实战经验总结,其中一些总结还细心地标明了出处,如关于过度设计和设计不足的权衡案例后面的总结:“具有实证主义态度的设计理念是面对不可预测的变化时,应首先保证方案的简单性;当变化真正发生时,可以通过诸如提炼接口(extract interface)[6]341的重构手法,满足解析逻辑的扩展。”
本书中有很多这样的总结,因此阅读这本书相当于吸收了很多本书的精华。记得张逸老师曾向我推荐过Robert Martin的《架构整洁之道》,当时我告诉他那是我2019年读的最好的一本书,而今天,我要告诉他,他的这本书是我2020年读到的最好的一本书!
作者:周吉鑫,京东资深业务架构师,2011年起至今在京东公司进行物流系统的建模、分析和设计工作,主要工作包括京东亚洲一号WMS、WMS3.0~WMS6.0系统、云仓、国际化物流系统、无人仓系统等的建模、分析和设计。
推荐序二
2019年的冬天,我从台湾赶往上海,为公司内的团队进行领域驱动设计(DDD)与事件风暴的培训,在完成了培训工作后马不停蹄地赶往北京,只为了与领域驱动设计社区的伙伴王威、张逸相聚。在2019年领域驱动设计中国峰会(2019 DDD China Conference)上,我们分享了领域驱动设计台湾社区对领域驱动设计的理解与实践方式。是日恰巧迎来了北京的初雪,趁着此情此景,一行人把酒言欢,正是“初雪纷飞夜访,奇闻经历共话,点拨思绪再整,把酒笑谈学涯”。
当时我们探讨了一个很重要的话题:很多人在学习领域驱动设计时,往往初探不得其窍门,而工作背景不同的人看待这一方法又往往仅侧重于一部分战略指导,或者只关注战略设计实践的代码层级,但不管侧重于哪一部分,都会让这种经典的指导协作与实现业务战略目标的软件工程方法略显失重,无法尽得其精要。
2003年,Eric Evans的著作《领域驱动设计》从欧洲席卷而来,乃至于全球的软件工作者都渴望从他提出的领域建模方法中得到帮助,但十多年来,Eric Evans本人经常被问到:“有没有一种方法可以很好地指引我们进行业务建模?什么样的建模才是合理的,或者说可以一次就成其事达其标?”Eric Evans本人在很多公开场合都提过,其实这一切都依然需要依赖一些经验和持续积累的领域知识。对于这样需要由高度经验法则施行的领域驱动设计,一般的软件架构师、程序员以及相关的从业人员往往望而却步,个中原因便是始终少了一个系统性的指引,将业务流程梳理的产物对接到后续的程序开发中,实现从业务架构到系统架构的良好实践,使常见的业务与技术之间的隔阂降到最低。
对于这本书,我首先要向张逸老师表达感激之情,然后祝贺本书的读者!感激张逸老师花了多年时间梳理并融合了其在软件设计领域的实务经验,将战略推进到战术过程中佚失的部分,并通过领域驱动设计统一过程(DDDUP),使领域驱动设计方法更加完备。祝贺本书的读者在拿到本书时就几乎综览了过去20多年的软件开发历程所提到的诸多重要元素。本书结合大量实务案例来探讨为何需要战略指导、为何需要以固有的战术设计范式指导实践,并辅以领域驱动设计统一过程的指导原则,指引读者逐步落地。本书不单纯以领域驱动设计来讲老生常谈的方法,而更像一位坐在你身边的资深架构师,与你结对进行系统架构设计,一起探索软件架构设计的奥秘。
如果读者对软件工程有极大的热情,渴望更好地理解、实施领域驱动设计,解决复杂的业务问题,就千万别错过这本书。但我最真切地提醒读者,在购书之后务必阅读与身体力行兼具。行之才是学之。
作者:高翊凯(Kim Kao),Amazon Web Services(AWS)资深解决方案架构师,领域驱动设计台湾社区共同发起人之一。他的专长是软件系统设计,并致力于无服务器服务推广,推动企业透过领域驱动设计与便捷的云端服务打造更适切的建构系统方案,解决实际的业务问题。
推荐序三
自2003年Eric Evans的著作《领域驱动设计》面世以来,领域驱动设计(DDD)相关的实践书籍并不多,整体的理论发展速度并不快,以至于很长一段时间,开发团队的实践过程总是磕磕绊绊,这让他们觉得领域驱动设计的门槛很高,甚至有人怀疑领域驱动设计是否是一种足够成熟与体系化的方法论。根据我个人的经验,我确实发现其中不少问题仍旧没有什么经典论著能完全覆盖与讨论。看过这本书的内容后,我的感受是:无论是理论还是实践,领域驱动设计知识体系确实都已经成熟了,与国内外的经典领域驱动设计著作相比,这本书包含了更多案例,覆盖了更多问题场景,回答了更多人们不常考虑的细节。本书作者不仅继承了各类经典著作的精华,更难得的是他能够在实践中深入细节进行推敲,批判与改良一些不成熟的理论,甚至有了自己的理论创新,例如,提出了菱形架构概念、对强一致事务与聚合的边界的一致性提出挑战……特别是,他还创造性地提出了领域驱动设计统一过程(DDDUP),很好地总结了完整的领域驱动设计知识体系。
有些读者可能不理解本书为什么这么厚。网络上有大量碎片式的领域驱动设计文章,一个案例只有几页,市场上也有不少领域驱动设计方面的培训,两天就能帮我们“搞定”领域驱动设计,领域驱动设计的知识体系似乎并没有我们想象的那么丰满。但事实上,这本书将告诉我们,领域驱动设计背后完整的知识体系并没有那么简单,我们需要掌握的是从业务到技术的整个技能栈。我们必须接受的事实是:领域驱动设计是有一定学习曲线的。所以,不要拒绝一本足够厚的书,这恰恰是其价值的体现。这本书的各个部分不是泛泛而谈,而是通过展开细节,层层推进,帮助读者建立扎实的理论基础,并通过大量翔实的案例,让读者能灵活运用理论知识。对于初学者,本书尽可能详尽地把问题展开、讲透;对于有一定经验的老手,本书也有更多有深度的细节思考和理论拓展。相信这本书会成为国内领域驱动设计技术书籍的一个标杆。
张逸先生是我国最早一批接触并实践领域驱动设计的先行者,经验极其丰富。本书不仅是他在该领域十多年实战经验的沉淀和升华,也是他多年教学经验的总结和提炼。他曾经为很多行业巨头提供过咨询服务,是国内在领域驱动设计方面影响力最大的布道者之一。看到张逸先生的书终于要出版了,我感到非常高兴,我们太需要这样一本既有理论升华又如此接地气的大作了。
我熟读了几乎所有的领域驱动设计经典著作,但仍旧从张逸先生的书中获益良多。我认为本书的广度、深度与创新性已经可以与该领域的国际经典著作看齐,这也是国人的骄傲。本书的出版是领域驱动设计理论界的一个重要事件,是对软件行业在领域驱动设计方面的巨大贡献,必将降低整个行业掌握领域驱动设计的门槛,加速领域驱动设计的普及。能为这本书作序是我的荣幸,同为领域驱动设计布道者,我将向我的同行强烈推荐本书。这本书也是我本人将来开展工作的重要理论指导。
作者:王立,微信支付12级专家工程师、技术领导者。他从2006年起开始研究领域驱动设计,曾经在阿里巴巴、神州数码、网宿科技等上市公司担任技术专家与技术经理,现在负责微信支付技术团队在领域建模、分析和设计方面的实践指导。
推荐序四
领域驱动设计方面的书现在不是太多,而是太少。想必不少读者受过《领域驱动设计》和《实现领域驱动设计》两本书的启蒙。本书是我特别推荐的领域驱动设计方面的技术书,为何特别推荐,且听下文。
大约在2007年,我第一次读《领域驱动设计》一书时,如读天书,主要记住了类似实体、值对象、工厂、仓储等概念。近年来,随着微服务的流行,国内对领域驱动设计的研究和实践愈发多了起来。
我对领域驱动设计的态度是:相对于战术设计,应该更看重战略设计。数年前,我醉心于研究领域模型。领域是业务变化中接近不变性的部分,业务包括领域对象、业务逻辑和界面交互3个层次,其中领域对象是最稳定的。2015年我组织领域建模工作坊活动时,用的就是《分析模式:可复用的对象模型》一书中的一个需求场景。2016年我写了一篇文章,强调了问题域和解决方案域的区分。张逸兄在GitChat上的两个连载专栏历时两年,创作数十万字,内容之丰满,关键节点探讨之深刻,于我之所见,浩瀚领域专家,无出其右者。虽大家都各自奔忙,仅偶有线上问候或者面聊,但皆有受益。本书的成书过程尤其令人钦佩,张逸兄不是直接将专栏调整成书,而是重新组织架构,提炼出自己的方法体系,可以说是推陈出新,自成一家。
张逸兄敢言人之所未言。领域驱动设计有四大不足:领域驱动设计缺乏规范的统一过程,领域驱动设计缺乏与之匹配的需求管理体系,领域驱动设计缺乏规范化的、具有指导意义的架构体系,领域驱动设计的领域建模方法缺乏固化的指导方法。他创造性地提出领域驱动设计统一过程,虽然此方法有无调整空间,一定是要在不断实践中去检验的,但单就他的这份胆识和专业,足以让人钦佩。
如果说非要给本书提一点儿意见的话,我觉得本书有点儿厚了。我认为一本好书也要兼顾读者的情况,最好能达到让读者快速上手的学习效果。但张逸兄坚持让本书以集大成者的面貌出现,洋洋洒洒数十万字,力求让其成为一本值得珍藏的技术书。
凡学习,须循序渐进。我建议读者把面向对象的分析(object-oriented analysis,OOA)、面向对象的设计(object-oriented design,OOD)、统一建模语言(unified modeling language,UML)、模式等相关知识作为阅读本书的前序内容。《领域驱动设计》一书也特别提到了“复杂性”,有一定的软件从业经验的朋友对“复杂性”更感同身受。
每个人心中都有一个哈姆雷特,每一位读者都可以登临领域驱动设计的阁楼,从不同的角度或俯瞰、或仰望、或凝视。我之所得:于道,是对限界上下文特别有共鸣的部分,以及问题空间(域)与解空间(域);于术,是作者提出的领域驱动设计的“三大纪律八项注意”,可作为团队执行作战任务的纪律规范。其中,“三大纪律”是实施领域驱动设计的准则:
领域专家与开发团队在一起工作;
领域模型必须遵循统一语言;
时刻坚守两重分析边界与四重设计边界。
信笔至此,兹为张兄推荐。本书精彩之处甚多,留待读者去发现。祝阅读愉快!
作者:于君泽(右军),技术专家,《深入分布式缓存:从原理到实践》和《程序员的三门课:技术精进、架构修炼、管理探秘》联合作者。