转载地址:https://blog.youkuaiyun.com/zhousenshan/article/details/52904084
在Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念中介绍过Java中的各种模型概念。
在这里简单再总结一下:
在日常的项目开发中,
VO
对应于页面上需要显示的数据(表单),DO
对应于数据库中存储的数据(数据表),DTO
对应于除二者之外需要进行传递的数据。
很多人可能对VO和DTO并不是那么熟悉,相反对DO却比较熟悉,那是因为在很多项目中由于种种原因我们只使用了DO,原因可能有以下几种:
1、项目太小,对于一种业务实体,封装成一个DO就够了。
2、并不熟悉DTO、VO,更不知道他们之间的区别。
3、了解DO\DTO\VO之间的区别,但是懒得用。
那么,这里,博主再啰嗦一下为什么要引入这么多概念,为什么我要建议大家在自己的项目中使用这些实体对象。
为什么不能只用一个DO
我们来看这样一个例子。假如我们的项目中由User这样一个实体。我们在创建User表的时候一般包含一下属性:
针对这个实体,我们通常需要创建一个DO类,用来封装这个User实体。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
然后,在代码中,从DAO一直到前端展示,我们都通过这个UserDO类的对象来进行数据传输。这样做会有什么问题嘛?
- 不需要的字段也会传递到前端页面。
- 如password、createdTime、updatedTime和status这几个字段我们可能在前端根本不需要展示,但是这些字段有可能也会被传递到前端(除非我们在SQL查询的时候没有查询出对应的字段)。这不仅使数据的传输量增大,还可能有安全性问题。
- 某些字段需要转换,但是无法支持。
- 对于上面例子中的政治面貌字段,我们在数据库中存储的是数字,但是在前端页面我要展示的是中文描述。这种情况只能在前端通过
if/else
的方式来分情况展示。
- 对于上面例子中的政治面貌字段,我们在数据库中存储的是数字,但是在前端页面我要展示的是中文描述。这种情况只能在前端通过
- 某些字段要展示,但是并不希望出现在数据库中
- 在User