领域对象(Domain Object)也被称为实体类,它代表了业务的状态,且贯穿展现层、业务层和持久层,并最终被持久化到数据库中,可细分为 4 中类型:
PO(Persistent Object):持久化对象,表示持久层的数据结构(如数据库表);
DO(Domain Object):领域对象,即业务实体对象;
DTO(Data Transfer Object):数据传输对象,原来的目的是为 EJB 的分布式应用提供粗粒度的数据实体,以降低分布式调用的次数,提高分布式调用的性能,后来一般泛指用于展示层与服务层之间的数据传输对象,因此可以将 DTO 看成一个组合版的 DO;
VO(View Object):视图对象,用户展示层视图状态对应的对象。
从分层角度来说,PO,DO/DTO,VO 分别属于持久层、服务层、和展现层。对于简单模块来说,有时 PO、DO 和 VO 并没有什么区别,这时就没有必要分别定义 DO 和 VO 了,直接复用 PO 即可。
一个对象变更导致另外一个对象变更影响另外一个对象:例如:订单的状态,应该支付的状态,支付状态影响到了订单的状态。**
1,如何生成对象关系图?
第一步:先画出来,限界上下文模块。
第二步:画完限界上下文,从角色出发,角色引出第一个对象
第三步:找出对象创建或状态变更,所依赖的界限上下文,和对象。
第四步:重复第三步找到更多的对象,对象之间的调用可以是:事件通知(API调用和消息订阅(异步的方式))和命令通知
第五步:通过梳理出来的对象关系
战术模型如下图所示:
设计元模型规定:只能由实体,值对象,领域服务和领域事件表示模型。聚合用于封装实体和值对象,并维持自己边界内所有对象的完整性。要访问聚合,只能通过聚合根的资源库,这就隐式地划定了边界和入口,有效控制了聚合内所有类型的领域对象。若聚合的创建逻辑比较复杂或存在可变性,可引入工厂来创建聚合内的领域对象。若牵涉到实体的状态变更,领域元模型建议使用领域事件来推动。