领域的概念:
这是一个范围概念,而且是面向业务的
子领域:
对领域中的业务继续拆分,一个子域可能是一个dll,也可能时一个命名空间
子领域根据业务不同又分为:核心子领域、支撑子领域、通用子领域
限界上下文:
领域驱动设计是基于领域的,领域之间的划分基于限界上下文
限的意思就是划分、规定,界就是界限。上下文就是业务的整个流程,总的来说,可以称限界上下文为业务流程在一个划定的界限中
实体和值对象:
对于实体Entity和值对象Value Object是领域驱动设计里面两个重要的模型对象。所以有必要对两者的关系和区别进行理解。
区别实体和值对象的方法就是判断是否有唯一标示,而不是属性,即使属性完全相同也可能是两个不同的对象。
实体:
实体核心是用唯一的标识符来定义,而不是通过属性来定义。即即使属性完全相同也可能是两个不同的对象。同时实体本身有状态的,实体有演进的生命周期,实体本身会体现出相关的业务行为,业务行为会实体属性或状态造成影响和改变。
值对象:
而对于值对象Value Object,它用于描述领域的某个方面本身没有概念标识的对象,值对象被实例化后只是提供值或叫设计元素,我们只关心这些设计元素是什么?而不关心这些设计元素是谁。书里面谈到颜色,数字是常见的值对象。这种对象无状态,本身不产生行为,不存在生命周期演进。
是否为值对象跟实际的业务场景仍然关系密切。书里面又举了地址的例子,当地址是值对象的时候,地址本身无状态,可以被多个实际有状态的实体使用,地址不存在太多的生命周期演进场景下地址为值对象。而对于本身行政区域管理软件中,地址本身存在状态,存在根据行政区域规划变化而演进的过程,因此地址为实体。
参考:http://blog.sina.com.cn/s/blog_493a84550101534t.html
https://www.cnblogs.com/laozhang-is-phi/p/9806335.html#autoid-1-0-0