领域驱动设计--领域对象的生命周期

主要内容

1:什么是Aggregate模式

2:什么是Factory模式

3:什么是Repository模式

4:factory 与 repository的关系

 

引言

每个领域对象都是有生命周期的,创建->销毁…等等。

主要面临2个挑战:生命周期的维护、防止陷入管理生命周期的困境

通过3个模式可以解决这些问题

 

什么是Aggregate模式

在复杂的模型关系中,保证对象的一致性很困难,紧密关联的对象之间是需要遵守一些固定规则,我们需要找到一个使对象间冲突较少而固定规则联系更紧密的模型

 

比如:汽车(entity)与轮胎,人们会通过汽车查询轮胎的使用情况。当脱离汽车这个entity,人们很可能不会关系轮胎的标识。我们可以把这种对外部无关的entity聚合在root entity里面。他的作用域和关联关系、生命周期都由root维护

这里的汽车就是aggregate root,轮胎就是aggregate内部对象

 

这里概念上有一些规则:

1:root entity 具有全局标识,负责维护域内对象的固定规则

2:边界内的entity 具有本地标识,域内唯一

3:aggregate外域对象不能引用除root外的 内部entity对象

4:只有root才能从数据库中直接查询获取,其他的需要关联查询

5:内部entity可以持有其他外部root的引用

6:删除操作必须一次性删除边界内所有的对象

 

总结:aggregate 划分一个范围,在这个范围内,生命周期的每个阶段都必须要满足一定的固定规则

 

什么是Factory模式

当创建一个对象或者创建整个Aggregate.很复杂,或者暴露太多的内部结构,则可以使用Factory封装

 

复杂对象的创建 是领域层的职责

Factory 不属于模型,但是承担了部分领域层的职责

factory有3种类型:factory method, abstract factory .builder

 

有些情况最好直接使用构造方法

1:这个类不是任何层次的一部分,没有通过接口实现多态

2:使用方关心实现

3:构造并不复杂

4:公共构造函数(必须是原子的,满足被创建对象的所有固定规则)

 

设计原则

1:原子性,一次性将所有参数传入,考虑创建失败的时候,返回什么。

2:与其参数松耦合,与其创建的对象紧耦合

 

什么是Repository模式

我们可以通过对象的关联关系找到对象,但是当他在生命周期的中间时候,必须要有一个起点,以遍历到一个entity或者value;

 

注意:当对象查询发送在entity的生命周期中间时候,查询出来的对象不是一个新对象。他只是被重建出来了,

 

Bad Case:

1:我们习惯构造SQL,通过基础建设层查询服务,得到的信息构造出的数据放到对象。对象成为了一个容器。这偏离了我们”领域模型“的初衷,更像是面向”数据处理“风格。

 

2:开发人员直接查询数据库,很可能丢失领域模型的固定规则,比如打破Aggregate边界。Entity 和value 变成了数据容器。

 

Good Case:

将用户的关注点拉回到模型本身,模型内再进行repository的使用封装

 

 

 

factory 与 repository的关系

Factory 负责处理对象生命周期开始,repository负责处理生命周期中间和结束

Factory 负责制造新对象,repository负责查找已有对象

repository可以委托factory创建新对象

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值