领域驱动设计-实体

实体的唯一标识

1.用户提供唯一标识

2.应用程序提供唯一标识

3.持久化机制提供唯一标识

PS: 维护实体唯一标识的稳定性,只有在创建时可以对唯一标识进行修改。自封装性有助于维护稳定。

创建实体

1.我们希望通过构造函数,能够完成实体的创建,创建过程中,使用自封装(调用自己的set方法

2.在实例化的过程中,要保证对象内数据的一致性,比如有当merchantVoucher==null时,order实体不能创建成功

验证

验证属性:Martin Flower建议使用自封装性做属性验证

public setEmail(String address){

if(StringUtils.isBlank(address)){ throw new IllegalArgumentExcetion(“address can’t be null”)};

if(address.length>25535){ throw new IllegalArgumentExcetion(“address can’t be too long”)};

}

验证整个对象:对于一个聚合或者实体,一个属性正确并不能代表整个对象是被正确创建的

由于验证逻辑需要访问实体的所有状态,有人可能会吧验证逻辑写到实体对象中,更多时候验证逻辑比领域逻辑本身的变化还要快,这样做很不好。,此时我们可以创建一个单独的组件进行验证:

1.实体对象的可以有protect的getter,在同一个包的验证类可以访问到即可

2.验证类可以采用规范模式或者策略模式,当发现状态非法时,验证类会通知客户方或者记录下来

跟踪变化

1.没有必要完整的追踪实体的变化,但是有时候会关心发生在模型中的一些关键事件,最常用的方法是领域事件和事件存储,相关的技术可以参考事件源模式

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...