如果你知道微服务,那么就一定听说过DDD.....
01
DDD到底是什么?
大家都知道,微服务划分的一个重要理论基础就是领域驱动设计。而DDD全称就是“领域驱动设计”,它是一种软件开发中用到的建模设计思想,软件的建模和设计类似建筑领域中建筑师的工作。建筑师把建筑的架构设计出来,首先是要满足和优化用户的需求,用户要住着舒适,安全;同样,软件的业务架构师也需要设计软件的业务架构,让软件能够非常好地满足业务需求,推动业务发展,软件的建模和设计就是业务架构中的重要工作内容。
业务越复杂的软件,建模和设计就越难,中国在芯片领域被卡脖子,不仅是因为没有光刻机,另一个重要原因是缺少芯片设计的EDA软件,EDA软件就是复杂软件的一个典型代表,芯片领域极其复杂,所以EDA软件的建模和设计也同样复杂。对复杂软件,传统的面向对象思想已经不够用了,举个例子,某大厂虽然具备极强的技术和管理能力,但是,早期使用面向对象的建模和设计思想来开发整个电商系统,最终也是以失败告终。DDD就是为了解决业务复杂的软件系统的建模和设计问题诞生的一种新思想(其实不算太新,但是近几年逐渐升温)。
02
DDD被广泛应用于哪里?
凡是涉及到复杂软件系统的设计,都需要用到DDD。
例如DDD对业务系统进行建模和设计,可以使复杂系统更具备可维护性和可更改性,各个模块的耦合更低,不会出现牵一发而动全身的情况。这一点,从下面我们会提到的某大厂使用面向对象建模和设计方法的失败经验,到现在WXG采用DDD就能够看到。
03
为什么DDD这么火?
一方面,随着国内经济的发展,早期的发展红利已经逐渐消失了,空白领域基本不复存在,各领域竞争越来越激烈,业务的复杂性也越来越高,所以对应的软件系统的复杂性也越来越高,以前简单软件也能赚钱的时代已经一去不返了。只会CURD、设计简单软件的人当然也没有市场了,市场需要的是具备复杂软件设计能力的人才,DDD是目前最有效的针对业务复杂系统的建模和设计思想,所以,市场上对掌握DDD的人才需求量不断增加。掌握DDD的人,才能担当现代软件系统的架构师,有较好的职业发展空间。
另一方面,随着微服务架构的流行,人们发现DDD能够为微服务架构中的一些问题提供理论指导,比如:如何划分微服务。所以人们更加意识到DDD思想的重要性。
发展趋势:
1) 和大数据、AI结合;
2) 理论和具体建模方法不断完善;
3) 面向DDD的框架和编程语言。
04
DDD的特点和核心是什么?
DDD的核心思想简单用一句话来说就是:通过分解来控制复杂性。分解又分两种:横向分解和纵向分解。
所谓横向分解:是指通过领域划分来分解问题,通过限界上下文来分解系统,把一个复杂的领域分解成几个不太复杂的子领域,不同子领域解决不同的问题,不同的子领域用不同的限界上下文来实现,这样,单个限界上下文的复杂度就可控了。
纵向分解:是指把技术实现从具体的业务逻辑分离出来,避免技术复杂性传染到业务层,当技术方案变更时,也不会影响业务代码。
05
DDD的分层架构和构成要素有哪些?
传统的分层架构分为下面四层,但是领域层依赖基础设施层会让领域层受到基础设施层的具体技术实现影响。所以,发展出来六边形架构和洋葱架构,这类架构归纳起来,统称为“整洁架构”。
06
大厂使用DDD的多吗?
可以很负责任的告诉你,目前大厂使用DDD的非常多,基本上所有的业务开发都在学习和应用DDD,或者是在应用DDD的路上。
从市场JD我们可以看出:
1) 市场需要懂DDD的人才,因为懂DDD的人才能够设计复杂系统;
2) 懂DDD的人才能担任现代业务系统的架构师,才会有更好的职业发展空间;
3) 大厂的核心部门都在使用DDD,使用DDD能够使软件系统的设计更合理,具备更好的可维护性和可改动性,模块和模块之间的耦合更低,业务不会受技术的影响,不会牵一发而动全身。
目前而言,DDD是针对复杂业务软件系统进行建模与设计的唯一有效的方法论工具,不夸张地说,在当今阶段,只有学会应用DDD,技术人员才真正具备了成为架构师的资格。可以肯定的是,任何软件开发人员,只要想实现更好的职业发展,都可以学习DDD,从中受益。