十分钟聊明白DDD领域驱动设计
文章目录
- 一、什么是领域?
- 二、领域如何驱动设计?
- 三、如何发挥DDD的价值
- 最后
十分钟聊明白DDD领域驱动设计
-- 楼兰 关于DDD,大部分朋友应该都听说过。 全称Domain Driven Design,翻译过来就是领域驱动设计。这个神秘的架构思想,虽然远没有SpringBoot这类框架这么名声在外,但是却经常时不时冒出来,牵动一下大家的神经。美团、阿里每年的技术年会都会有关于DDD的经验分享,而另一方面,又有移动、电信等公司爆出DDD从入门到放弃的失败案例。
那么到底什么是领域驱动设计呢?是不是用上了DDD的所谓四层架构,就是在用DDD了?其实DDD这东西看起来挺抽象,但是核心就是需要搞明白三个问题。
- 到底什么是领域? DDD如此强调领域的重要性,但领域到底长什么样子呢?他应该要怎么落地呢?
- 领域如何来驱动设计? 为什么DDD只是用来驱动设计,而不像SpringBoot那样直接做出一种框架实现呢?
- 怎么用好DDD,或者说我们怎么来衡量DDD的价值? 一旦一个技术有价值,那么在行业内学起来用起来一定不难。就像Spring和SpringBoot,你别管他多复杂,里面有多少垃圾代码。但是他就是有用,所以毋庸置疑,你就能学好,企业也就能用好。
对于DDD这么一种抽象的架构思想,其实如果把这三个核心问题想明白了,那么我觉得这个DDD,就通了一大半了。
一、什么是领域?
这可以说是DDD最为核心的一个问题了。到底什么是领域呢?
领域这个词看起来挺抽象的,但其实我们也在天天说领域。我们会说Java是一个领域,软件是一个领域,有时候也会说技术本身就是一个领域。每个领域都有他的领域知识以及对应的能力要求。
但是到底什么是领域呢?其实,领域的核心是另一个很好理解的词:边界。
大家想一想,当我们说Java是一个领域的时候,是不是在强调Java和C、C++、Python等这些语言之间有一个明显的逻辑边界?当我们说软件是一个领域的时候,是不是在强调软件技术和硬件技术之间有一个明显的逻辑边界?当我们说技术是一个领域的时候,是不是在强调技术和运维、测试、项目管理等等这些工作之间有一个明显的逻辑边界?
所以领域的本质其实就是边界。只要你形成了比较明显的逻辑边界,那么不管形式是什么,我们都可以形成一些领域。DDD中,其实强调的领域也就是这么一种形式。
不过,这和我们做开发有什么关系呢?
以我们现在习惯了的MVC开发方式为例,我们也会去做很多边界的划分。以一个电商项目为例,在设计一个电商项目的后端实现时,我们也会设计一些不同的Controller接口,负责不同的业务。比如用一个UserController来承接用户相关的业务逻辑。包括用户登录、注册、修改密码等等这些功能。同时也会用一个OrderController来承接订单这部分的业务,比如下订单、取消订单、订单退款等等这些操作。其实这时候你看,UserConntroller和OrderController之间,是不是就形成了一个井水不犯河水的逻辑边界?
别管形式是什么&#x