为什么要写此书
我小的时候比较喜欢拆家, 和幼年的哈士奇有些类似。 不过经济条件所限, 能拆的东西也仅限于钟表、 收音机这类小的物件儿。 儿时的梦想是成为一名科学家或老师, 不过随着成长, 梦想也逐渐变得更现实起来, 最终选择了与软件设计为伍。
很多人羡慕程序员的高薪与体面, 殊不知我们自嘲为码农。 软件设计是一种创造性的活动, 它与艺术创作类似。 自然, 大部分人的职业生涯早期的确都会做一些搬砖类的工作, 但我们不应该让其变成一种常态。
我于2007 年接触领域驱动设计(DomainDrivenDesign, 简称: DDD) , 但学习过程并不顺利。 好的方面是伴随着失败, 自己也积累了很多更为务实的知识。 2021 年, 我怀着满满的自信尝试在网上发布一些领域驱动设计相关的文章, 期望能将自己所学的知识进行总结与分享。 这期间有幸认识了北京航空航天大学出版社的编辑, 他们鼓励我将自身所学体系化, 本为玩票性质的事情自此开始偏向了另外一个方向, 成为编写本书的一大诱因。
为什么选择领域驱动设计
进入21 世纪, 人们的生活伴随着互联网的发展有了翻天覆地的变化。 加之智能手机和各类智能设备的催化, 单机软件所带来的满足感已经不能满足人们日常生活与工作的需要。 事物总是有两面性的, 软件的各种功能在满足我们方便使用的同时, 便是其规模和复杂度的急剧扩张, 仅仅是技术知识的爆炸对于精力有限的我们就是一项很大的挑战。
领域驱动设计诞生于21 世纪初, 历经20 余年的发展至今仍活力十足。 越来越多的人开始意识到它的强大和先进, 其思想被应用到各类大型软件项目中。 但现实的情况却很残酷: 我们都知道它很强大, 但我们不想用。 客观来讲, DDD 诞生之时的确是超时代的。 有些理论过于理想化并不能在真实的项目中被轻易实践, 比如限界上下文。 没有现代微服务技术的加持, 我们很难将其落地。
软件系统越发复杂, 使得企业不得不背负更高的建设与运营成本,DDD 作为应对软件复杂之道是解决这一问题的有力武器。 与此同时, 时代的发展以及技术的推陈出新也让 DDD 真正地有了属于自己的舞台, 这是我们选择它的原因。
如何使用本书
本书主要适用于软件设计人员和研发人员, 您需要至少了解一门面向对象开发语言, 如 C# 、Java。 当然, 这些仅仅是基础, 软件设计并不只是某一门特定的学问而是各类知识的集成。 所以想要无障碍阅读本书, 您还需要了解一些简单的设计模式以及UML 相关的内容。
本书分为战略与战术两部分, 后者所涉及的知识虽与前者有关系, 但亦可独立存在。 如果您初入软件设计行业或从事本行业时间尚短, 建议先从第二部分读起。 战略相关的知识理论色彩较浓厚, 是劝退读者的最佳武器; 战术部分则侧重于各种技术的讲解, 这才是程序员最喜欢的内容。 当您确信自己能够被 DDD 吸引的时候, 可再回到第一部分, 避免让自己的学习旅程出现夭折。
除技术人员之外, 项目经理、 架构师或需求分析师也可成为本书的读者, 尤其是战
略部分。 如果您的角色处于上述工种, 可以考虑从第一部分读起, 以学习如何站在更高的战略角度去了解系统的全貌; 学习如何将一个大的系统进行划小建设; 学习如何有效安排各类资源, 即钱、 事、 物。
与其说领域驱动设计是一种技术, 不如将其看成设计思想更为合适。 笔者资历尚浅, 本书其实是一种尝试, 即: 通过个人的理解并伴以务实的态度对领域驱动设计这一门学问进行个性化解读。 有理解或表达不当之处, 请读者在求同存异的同时, 有取舍地借鉴书中内容。
编 者