Appearance
实体
有唯一标识的的个体,比如身份证,这个身份证号码会一直跟着我们不会改变,即使你改了名字户口状态变化,但是身份证号码是不会变化的,这也是实体的另一个特征就是它具有延续性。实体对应了业务对象的业务属性以及业务行为。
值对象
不需要唯一id来标示的对象,可以这么理解,当我们在外面吃饭的时候,在餐厅里面选位子落座,我们会关心这个桌子是哪里生成的,编码是什么以及规格是怎样的吗?显然不会,有空位坐就可以了。当然我们还是需要关注值对象上下文的,如刚才的例子,我们消费者并不关心坐哪个位子,但是商家是关心的,因为他要根据桌号来进行上菜以及收账。 再来举一个例子,在我们设计用户信息的时候,这其中就会包括用户的地址,用户的地址实际是由这个用户是哪个省的,哪个市的,哪个县的以及具体地址是什么、邮编是什么等等属性信息组成,那么这个地址信息在用户信息中实际就是一个值对象
聚合
不同的实体和值对象按照业务规则的组合分工,完成统一的职责目标动作。聚合就是有业务关联关系的实体以及值对象的集合,通过实体、值对象以及各自之间的业务逻辑聚合在一起完成某个业务节点,我们就可以理解为聚合。如果人是一个个不同的业务实体,那么社会中的不同组织、机构就是将对应技能的人聚集在一起发挥更大的业务价值以及完成更加复杂的业务行为的的集合,这就好比我们公司里面有种各样的部门,有人力部门负责招聘和薪酬、有销售部门负责营销、有研发部门负责产品研发。不同的部门实际就是不同的聚合。
聚合根
聚合的出现实际是一种业务单元,那它必定涉及到数据的持久化,如果在聚合中的任意实体都可以被外部进行数据修改,那么我们将很难保证聚合内的数据一致性。因此我们需要有一个数据输入修改的统一入口来保证聚合内的数据修改统一的符合聚合中的业务规则,因此出现了聚合根的概念。聚合根实际是就是一种实体,具备唯一标识,有独立的生命周期。但是他是特殊的实体,他有协调实体以及值对象完成业务逻辑的功能,好比是一个部门的负责人一样。一个聚合只有一个聚合根,聚合根在聚合之内采用引用依赖的方式对实体和值对象进行组织和协调,聚合根和聚合根之间通过唯一id进行聚合之间的协同。