VO与DTO的联系与区别
联系
DTO类和VO类都是在java程序开发过程中用来接收数据和返回数据的类
区别
DTO代表服务层需要接收的数据和返回的数据
VO代表展示层需要显示的数据
自我理解
VO类是前端传给后端的数据的载体,DTO类是后端传给前端数据传输对象载体,效果差不多,只是使用的地方不同
示例讲解
DTO示例
例如Service层有一个getUser的方法返回一个系统用户,其中有一个属性是gender(性别),对于Service层来说,它只从语义上定义:1-男性,2-女性,0-未指定,而对于展示层来说,它可能需要用“帅哥”代表男性,用“美女”代表女性,用“秘密”代表未指定。说到这里,可能你还会反驳,在服务层直接就返回“帅哥美女”不就行了吗?对于大部分应用来说,这不是问题,但设想一下,如果需求允许客户可以定制风格,而不同风格对于“性别”的表现方式不一样,又或者这个服务同时供多个客户端使用(不同门户),而不同的客户端对于表现层的要求有所不同,那么,问题就来了。再者,回到设计层面上分析,从职责单一原则来看,服务层只负责业务,与具体的表现形式无关,因此,它返回的DTO,不应该出现与表现形式的耦合
VO示例
例如前端传给后端的数据包含了数据库中两个表的数据,那么我们可以创建一个VO类来接收前端传过来的数据,然后再将其中的数据分别保存或更新到数据库的两个表中