DDD架构中的领域是什么?


​ 我们经常说到DDD分层架构(领域驱动设计),那么究竟什么是DDD架构?如果去网上查通常会告诉你告诉你区别于过去的三层架构思想,DDD(领域驱动设计)是一种四层架构,一般网上给出的就是用户接口层、应用层、领域层、基础层。而当你真正开始看的时候发现通篇文章中会反复出现领域这个词,而领域究竟是什么?却又很少有人能去解释或者说无法解释

1、浅谈领域一词

​ 领域一词在不同人不同行业中都有不同的理解。中文中【领域】有生物学概念、数学概念等多重意义。出自闻一多《文学的历史动向》:“诗,不但支配了整个文学领域,还影响了造型艺术。” 对它的解释有:具体指一种特定的范围或区域、一国主权所达之地、一种专门活动或事业的范围、部类或部门。那么根据字面意思来看,无论何种解释,它指的都是一个范围一个区域。

2、面向对象谈领域

​ 1、现在的编码都由原来的面向过程编程变成了面向对象编程

​ 2、既然我们是谈DDD(领域驱动设计),那么就得先知道DDD(领域驱动设计)的大概思想,这里先不多做解释,在DDD设计模型中,领域的核心思想是业务

​ 通过以上两点我们得到了我们是面向对象编程,我们的DDD(领域驱动设计)领域核心是业务。那么对象和领域又是什么样的关系呢?

​ 我们都知道代码中有一种思想叫做抽象,而抽象就是把现实中真实存在的一些人、物或者事等等使用抽象化的代码来表示,对于抽象出来的代码我们用一个类表示,这个类有自己的属性有自己的操作,而这个类就是一个对象,我们又叫做实体

​ 我们之前说了,领域就是一个范围,在面向对象编程中,一个领域就是多个相同实体的集合,是一个一对多的关系,从多个相似实体抽象出共同特征得到一个领域

3、领域的划分

​ 领域划分的主要思想是从需求出发,通过需求先划分实体。通过上面我们知道领域是多个实体的集合,那么再通过实体划分领域。这样一来我们包含的层级结构一下就出来了,具体我们以一个商城的案例分析一下

​ 1、首先我们对需求进行深度分析,商城一般包含有订单实体、订单详情实体、营销活动实体、营销工具实体等等

​ 2、接下来我们需要对所有实体按照职责相似度,对实体进行归类,每一类我们取一个新的名字,这就是领域。比如我们的订单实体和订单详情实体都是在交易的时候需要的,而营销活动和营销工具都是做推广的,那么我们分别为其取名为交易域和推广域。这也体现了我们之前所说的领域和实体一对多的关系

​ 虽然只有两个步骤,但是具体的分析却是要慎之又慎,如果当碰到一个新的实体就划分为一个新的域,那么你会恐怖的发现自己的域会越来越多,这个时候对于未来的业务上又会出现越来越多的高耦合场景。所以对于抽象出域的标准和规范需要根据具体业务场景进行深度分析之后划分。切忌:以场景来划分领域,我们应该以业务对象聚合来划分领域

​ 领域划分的原则就是按照实体的职责相似度来划分,领域之间的边界明显清晰。而这就是为了达到领域的高内聚低耦合。最大程度上做到相似的领域聚集在一起,无相似度的领域之间最好是隔离的、耦合度很低的,这样更加有利于业务的稳定和扩展。

4、回顾

​ 以上讲解的就是我们DDD(领域驱动设计)中的领域和领域划分,具体我们划分了领域有什么作用,在DDD(领域驱动设计)中怎么去使用这种划分,我们在下一篇中再慢慢谈