天天看点

聊聊国内IT圈的一门“隐学”

"IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。

导语:领域驱动设计是近几年燃起的一个热点,单从其图书排名来看,在某东计算机与互联网类,由去年的100多名,逐渐上升到现在经常在50名以内,而关于它的文章和培训课程也数不胜数。它不是一门编程技术,而是起于某种软件系统设计思想,落地于一套实施方法,与软件设计相关,是值得软件系统设计人员、软件产品经理、软件开发人员花时间去研究的。

聊聊国内IT圈的一门“隐学”

领域驱动设计的源起

领域驱动设计(Domain-DrivenDesign,DDD)一词源于Eric Evans在2004年出版的图书。但早在该书出版前,一些软件设计人员就已经认识到了领域(如银行业务、电商、物流、医疗等不同的领域)建模和设计的重要性。具有一定软件系统设计经验的相关人员,对这一点往往都有所感触。

好的思想落地时往往会发展出一套实施方法,Eric Evans通过自身10年的复杂系统设计经验,总结出一个领域驱动设计(以下简称DDD)的实施框架,以及一个统一的词汇库,软件系统设计与开发人员可以利用这个框架来系统性地应用DDD。

领域驱动设计的发展

自从Eric Evans的DDD书籍出版以后,涌现出很多其他书籍和文章扩展了其中的观点,人们创建了各种新的方法来应用这些原则,各种在线课程与会议遍布欧洲、亚洲和北美等世界各地。Evans本人也认为:DDD社区需要大家共同发展。

DDD过去十多年中主要有三个阶段:

● Eric Evans的理论原则创建和普及阶段;

● 引入领域事件、事件溯源阶段;

● 微服务架构的提出阶段

由于DDD提出的有界上下文已经将业务的边界划分清楚,因此,微服务的实现就非常顺利成章了。同时,在人们不断丰富DDD的实现技术以后,突然回首才发现,DDD中的战略模式需要更多的关注,因此,事件风暴等有关组织管理等方面的新事物开始出现。

随着国内信息化进程的快速推进,软件系统日益复杂,微服务设计的应用热度高涨,DDD从沉寂中崛起,受到行业内的广泛关注与讨论,但其最佳实践还在探索之中。

领域驱动设计的基本思路

这里简单说一下DDD的基本思路。DDD是专门解决复杂性的方法论。当需求规模比较大时,需求内部可能会发生矛盾,有些矛盾隐藏得非常深,可能通过代码实践才会发现,但是这种代码试错的代价非常高。而领域驱动,就可以让一些有丰富领域知识和逻辑思考能力的人通过头脑风暴等发现系统的复杂核心所在。这个过程的实施在DDD的发展过程中形成了一套比较有效的方法。

问题空间的复杂性是天然存在的,一个大型系统肯定要比小型系统复杂得多。DDD关注的重点就是如何将复杂的问题空间通过逻辑分析解析出来,从原来的混乱无序变得有条理、有层次,相互隔离、松耦合,就能分派不同的团队专门处理各个问题的子域或有界上下文,分而治之。

领域驱动设计的知识框架

DDD共有两个部分:战略设计和战术设计。战略设计也可理解为策略设计,是从宏观角度着眼于领域的分析设计,属于系统分析阶段,注重如何从有界上下文中寻找领域模型,战略模式由有界上下文、无所不在的语言和上下文映射组成;而战术设计属于设计代码阶段,使用聚合、实体、值对象等对象类型概念表达领域模型。

下图以板桥老师(解道网站创办者和版主,关注DDD十余年。扎根软件行业30 年,首个国内 Java 开源框架项目的设计者,持续跟踪和传播国际最新软件架构思想和设计技术,致敬!)新著图书《复杂软件设计之道:领域驱动设计全面解析与实战》中的大纲为基础,展示DDD的知识框架。

聊聊国内IT圈的一门“隐学”

一种设计方法不一定完全适合某个系统,或某个人/团队,但好的设计方法一定能给人以新的启发,让设计人员在思想碰撞中不断地思考与进步,将各种方法融入自己的知识系统之中,使用时灵活取舍,找到自身的设计之道。DDD就是这样一种值得去探索的方法。

为了助力DDD在国内的探索与实践,机械工业出版社特别邀请板桥老师总结了发展十多年后的DDD,编写出版《复杂软件设计之道:领域驱动设计全面解析与实战》。

为读者提供更加清晰的DDD知识脉络

各个击破、详细解析

当当计算机/网络新书榜第13名

聊聊国内IT圈的一门“隐学”

作者:解道网板桥/banq编著 

关键词:领域驱动设计 DDD 微服务 CQRS 软件架构  软件系统设计

适合人群:软件产品经理、领域专家、软件设计开发相关从业人员

本书前6章全面解析了DDD的分析方法和技术架构,包括领域驱动设计基础、领域驱动战略设计(有界上下文和统一语言)、聚合设计、实体和值对象、CQRS架构和事件溯源,第7章使用经典的货物运输系统案例进行了完整、详细的综合演示。

本书同时引入了DDD的最新发展成果,如事件风暴建模,并以此建模方式替代传统的DDD建模方式讲解了多个案例。还涉及大量软件系统实现相关的技术和架构,读者在学习DDD的同时,也可以掌握这些技术、架构在DDD实现中的灵活应用。

另外,每个概念或方法的讲解过程都穿插了具体实例,以方便读者结合实例进行学习;第2~7章每章最后都有总结与拓展,将本章涉及的案例和知识进行总结,并引入国际DDD专家的心得经验,试图告诉读者一条DDD实战中行之有效的途径。

继续阅读