java开发中pojo、model和entity的区别及DTO与VO
其属性字段可能不与entity一一对应,Model是一个高度优化组合或者精简后的一个用于在View层展示数据的对象。(可能为多个entity的某些属性组合,也可能为单一entity的精简,具体结合业务需求来决定。根据实际开发中来看,model作为包命名,包内一般写与前端交互的response和request,根据业务需要的数据将entity中一个或多个字段数据封装成response和request
一、pojo(Plain Ordinary Java Object无规则简单Java对象)
简单java对象
简单的javabean的对象,对应数据库某一张表,表的字段与pojo类的属性都要一一对应?
(查阅发现没有具体对pojo描述,有的说是作为业务协作类不需要一一对应)
但在实际开发中较少以pojo来对包命名。
二、entity(实体类)
数据表对应到实体类的映射
则类属性与数据库表字段一一对应
在实际开发中较多以entity命名数据库基础类包。
三、model(基于业务层数据)
其属性字段可能不与entity一一对应,Model是一个高度优化组合或者精简后的一个用于在View层展示数据的对象。(可能为多个entity的某些属性组合,也可能为单一entity的精简,具体结合业务需求来决定。)
根据实际开发中来看,model作为包命名,包内一般写与前端交互的response和request,根据业务需要的数据将entity中一个或多个字段数据封装成response和request。
四、model和dto的区别
开发过程中发现,model层和dto层都是面向前端传输类型,有点好奇他们两者之间的区别到底是什么,查询之后发现——此处借鉴内容
简单的说:DTO(数据传输对象)封装的数据面向表现层(UI),Model封装的数据面向业务逻辑层(service)。
好处:开发中模型改了但是UI没变,则只需要改变model,而不需要改其他。
DTO:
DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。
服务之间传输,可以包含更多所需要的数据,各个服务选取自己需要的数据,有与model类似的点,都是需要精简entity中数据,举个栗子
在用户修改密码的controller中,我们可能只需要拿到用户名、用户密码和用户修改新密码,即可对数据库进行操作,则我们把用户密码和用户修改新密码封装为一个dto类型,只拿到自己需要的类型
五、VO与DTO的区别
有点奇怪这里又来了一个VO,先解释一下什么是VO
VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
VO与DTO都是展示层与服务层之间传递数据的对象,那为什么区分成两个呢,参考论坛老哥——对于绝大部分的应用场景来说,DTO和VO的属性值基本是一致的,而且他们通常都是POJO,因此没必要多此一举,但不要忘记这是实现层面的思维,对于设计层面来说,概念上还是应该存在VO和DTO,因为两者有着本质的区别,DTO代表服务层需要接收的数据和返回的数据,而VO代表展示层需要显示的数据。
用我个人的理解来说明,DTO接收和返回的数据的某些字段,可能对于展示层并不是完全需要的。
更多推荐
所有评论(0)