DDD(三)——领域


1,引言

领域一词在百科上的解释为“具体指一种特定的范围或区域”。java

书中常常讲到,某某某是商业界奇才,谁谁谁是天下第一,在此商业界和天下都是领域,指一特定范围。框架

软件开发也能够称之为软件领域,软件领域下又还有java相关领域,java相关领域下又还有各类框架也能够称之为领域。设计

可是换个说法,软件领域下又能够说有医疗领域软件、物联网领域软件等等。日志

经过以上描述,对于领域一词应该有必定的概念了,下面咱们来看看DDD中的领域。图片


2.领域

你可能不知道DDD是什么,DDD是一种软件系统分析建模的方法,既节约时间也解决问题的一个方法。开发

经过上文描述,不管是医疗领域软件、物联网领域软件都是软件系统这个领域当中,无非是所做用的范围不一样,那么DDD中的领域其实也就是字面意思,换到系统分析中来讲,就是为了清晰明确的划分边界范围。电商

《领域驱动设计:软件核心复杂性应对之道》一书中的总结:软件

一个领域本质上能够理解为就是一个问题域,只要是同一个领域,那问题域就相同。因此,只要咱们肯定了系统所属的领域,那这个系统的核心业务,即要解决的关键问题、问题的范围边界就基本肯定了。方法

也就是说领域就是围绕问题划分的边界范围。因此也能够理解为分析需求、分析业务。弄清楚了核心业务,以此拆分问题划分红各个领域。im


三、子域

拆分领域,就像分析问题。举个例子咱们准备周末去爬梧桐山,逐步分析咱们能够得到什么时候出发,去什么地方,作什么事情,什么时候结束等等一些列问题,什么时候出发又能够分析出住的近的和住的远的又在何时出发,逐步分析问题,拆分领域,而拆分出来的这些领域就是最初“咱们准备周末去爬梧桐山”这个问题域的子域。


四、核心子域

对于上面的例子“咱们准备周末去爬梧桐山”这个活动有一个核心点,那就是爬梧桐山,全部的准备都是为了完成爬梧桐山。“爬梧桐山”就是这个问题域的核心域。运用到分析需求中,就是让咱们能明确的知道系统的核心功能,一切其余功能都是为了更好的为核心功能服务。

为何要先肯定核心域?

由于做为一个业务的核心存在,它最能体现系统的核心价值,也是核心竞争力。若是要最大化系统的价值,咱们必然要在核心域的设计上更胜一筹。 肯定核心域后,咱们在进行开发设计的时候就有了主次之分。


五、通用子域

假若有一个电商系统,那么必然少不了帐单记录,操做日志这些功能,在划分领域的时候会发现,操做日志不管是什么领域都要去插上一脚,这种领域称之为核通用子域。


六、支撑子域

一个问题域并不是是靠核心域来支撑的,而是数个非核心领域可是很是重要的领域,仍是电商系统,用户购买商品造成订单来解决购物这一个核心领域的问题,若是没有用户、商品、订单这三个子域,也就解决不了核心域的问题,这种称之为支撑子域。


七、分析

经过上面这些概念的描述,咱们不难发现这其实就是另外一种方式的UML类图、业务流程图,都是为了清晰思路,是为了描述各个模块也就是领域之间的关系,从而理解业务,划分业务边界,更好的解决问题解决需求。因此DDD中领域与以往的业务分析并无很大区别,不过是换了一种分析方法。

java一样有此方法,能够把类当作问题域,把方法当作子域。


八、限界上下文和通用语言

领域是为了划分边界的,可是有些时候并不能经过领域来肯定边界。从业务上划分购买、促销、售后等下文。

从需求上着手,操做日志也能够做为有一个独立的上下文。

观察的角度不一样,也就能够划分不一样的上下文,正所谓一万我的眼中有一万个哈姆雷特,如何让团队成员都能理解所描述的每一个上下文呢,这就须要通用语言这个概念了,通用语言就是字面意思,为了让团队成员统一标准,避免出现你的图片属性叫img,他的图片属性叫image,你们理解起来也有困难。


九、小结

上述中,简要梳理了DDD中领域、核心域、通用子域、支撑子域的定义。

  • 领域是有范围界限的,也能够说是有边界的。

  • 核心域是业务系统的核心价值所在。

  • 通用子域能够理解为业务系统全部子域的消费者,提供着通用服务。

  • 支撑子域专一于业务系统的某一重要的业务,来支撑和完善业务系统。

因此领域其实就是分析需求、划分模块、清晰业务的一种方式方法。

相关文章
相关标签/搜索