0%

领域驱动设计和模型

1. 数据模型

300

1.1 DTO (前后端传输对象)

DTO(Data Transfer Object)数据传输对象,这个传输通常指的前后端之间的传输(req)。
在后端,他的存在形式是 java 对象,在前端,他的存在形式通常是 js 里面的对象,这也是为什么把他画成横跨两层的原因。

1.2 VO (前端展示对象)

VO 就是展示用的数据,不管展示方式是网页,还是客户端,还是 APP,只要是这个东西是让人看到的,这就叫 VO
VO 主要的存在形式就是 js 里面的对象(也可以简单理解成 json)

VO 和 DTO 的区别
DTO 可能是这样的

1
2
3
4
{
"gender":"男",
"age":35
}

因为是一个古风聊天室,也不能直接展示男,而且不需要精确的年龄, VO 是

1
2
3
4
{ 
"gender":"公子",
"age":"30~39"
}

DTO不应该出现与表现形式的耦合,DTO定义的是原始数据,VO再对DTO数据进行解释。这下VO和DTO用法就清晰很多了。

1.3 PO (数据持久对象)

简单说 PO 就是数据库中的记录,一个 PO 的数据结构对应着库中表的结构,表中的一条记录就是一个 PO 对象
对于 PO 来说,数量是相对固定的,一定不会超过数据库表的数量。

1.4 BO (业务对象)

BO 是一个业务对象,一类业务就会对应一个 BO。我们可以把BO看作是PO的组合。

PO-1是交易记录对象,PO-2是登录记录对象,PO-3是商品浏览记录对象,PO-4是添加购物车记录对象,PO-5是搜索记录对象,BO是个人网站行为对象,BO对象:{PO-1;PO-2;PO-3;PO-4;PO-5}。

这样做的优点不言而喻,维护代码的时候查看BO,就能知道这块逻辑涉及多少表(PO)。

BO 和 DTO 的区别

BO 对内,DTO 对外。

BO对象中的某些属性对象可能用不到或者不方便对外暴露,那么此时DTO只需要在BO的基础上,抽取自己需要的数据,然后对外提供。

1.5 建议

1,PO 这个没法省,不管叫 PO 还是 DAO,怎么着都得有。
2,一些工具类的系统和一些业务不是很复杂的系统 DTO 是可以和 BO 合并成一个,当业务扩展的时候注意拆分就行。
3,VO 是可以第一个优化掉的,展示业务不复杂的可以压根儿不要,直接用 DTO。

2. 参考资料

可以加首页作者微信,咨询相关问题!