领域(domain),广义的领域即是一个组织所做的事情以及其中所包含的一起。每个组织都有自己的业务范围和做事方式,这个业务范围以及在其中所进行的活动便是领域。
对应软件设计来说,一个业务范围以及这个业务范围内的软件活动,就是领域。领域驱动设计,我认为可以说是面向业务的软件设计思想。
一个组织有一个大的业务范围,然后划分为组织部门,也会划分为子业务,这就是子域的概念。对应软件设计,就是把一个大的系统划分为一个多个模块,即多个子域。
限界上下文,是一个语义上的边界,在一个限界上下文中的概念是统一的无二意的,所以通用语言只是在一个限界上下文中统一的。
对应于软件系统来说,限界上下文并不只局限于容纳模型,它通常标定了一个系统,一个应用程序或者一种业务服务。对应微服务架构风格来说,一个限界上下文通常对应着一个微服务。
问题空间是核心域和其他子域的组合。问题空间是领域的一部分,对问题空间的开发将产生一个新的核心域。对问题空间的评估应该同时考虑已有子域和额外所需子域。
解决方案空间包括一个或多个限界上下文,即一组特定的软件模型。这是因为限界上下文即是一个特定的解决方案,它通过软件的方式来实现解决方案。
存在的疑问:
1、两个限界上下文是否可以交叉?分析来说,是不可以交叉的,限界上下文是有明显边界的,如果有交叉,那不就是两个系统的耦合吗?但两个限界上下文肯定是需要有关系,可以通信的,这应该就是下一章要讲的上下文映射图,成为上下文的集成。那限界上下文可以嵌套吗?这是目前我还不清楚的地方?
2、两个领域,如果不是父域和子域的关系,那也应该是不可交叉的?领域代表着业务范围,如果两个域有交叉,那就是业务范围没有划分清楚了,这是DDD中比较忌讳的业务分不清的情况。但领域之间有关系吗,怎么通信?这是目前我还不清楚的地方?