PO、VO、DO...还在傻傻分不清楚吗?

2020-10-17  本文已影响0人  Coding测试

​JAVA是面向对象编程,原本一个对象就解决了所有问题,但是用的地方多了一个对象就不够用了,就有了衍生版本。PO、VO、DO……应运而生,但是没看到一个官方的权威性的定义,各个版本也有不同的说法,这里谈谈我的个人理解。我们先来看看他们的定义:

这么多对象,我们该怎么用呢?是不是所有对象都要用上呢?
编码风格也是分派系的,不同派系有自己的特点,也不需要用到所有的对象。业界比较良心的阿里派系,《阿里巴巴 Java 开发手册》中就只有DO、DTO、BO、VO和Query五种对象。如果你够豪横,就用一个对象处理所有问题也是完全可以的,但是这样做,代码的可维护性就太差了,而且可能会造成数据安全问题和性能问题。例如我们有对象Book和User两个对象

/**
 * @Description 书籍
 * @Author Rogear
 * @Date 2020/9/11 10:58
 */
public class Book {
    /**
     * 自增id
     */
    private Long id;
    /**
     * 书籍名称
     */
    private String name;
    /**
     * 售价
     */
    private Double price;
    /**
     * 作者
     */
    private String Author;
    /**
     * 发布时间
     */
    private Date publishTime;
        ...(省略get和set方法)
}
/**
 * @Description 用户
 * @Author Rogear
 * @Date 2020/9/11 11:01
 */
public class User {
    /**
     * 自增id
     */
    private Long id;
    /**
     * 用户姓名
     */
    private String name;
    /**
     * 密码
     */
    private String password;
    /**
     * 性别
     */
    private String gender;
    /**
     * 书籍
     */
    private List<Book> bookList;
    ...(省略get和set方法)}

如果界面上需要展示用户信息,那我们需要处理敏感信息,例如将密码隐藏起来或者直接不传给视图层。如果我们新建一个UserVO,里面直接不包含敏感信息,那是不是更方便呢?

再则,如果我们要对用户信息做CRUD操作的时候,传输过程中带有了非用户基本信息,例如上面的bookList。一方面这个数据对当前业务没有用,无意义,另一方面这样会让对象变大,字节更多,网络传输的时候会更加慢影响系统性能。如果我们在各业务里面造一个只包含用户基本信息的对象,那就比较完美了。

由于种种原因的驱使,我们需要使用不同对象,那什么情况下用什么对象呢?

首先抽象概念的对象,POJO、Domain、Entity三个对象概念过于抽象笼统,见名不知意,建议代码中就不要使用了,我们应该用一些更加具体化的对象。

VO直接和视图层进行交互,无论是控制器向界面展示数据,还是界面提交表单等都用VO。

DO/PO直接和数据库进行交互,写数据库和读数据库都用他。

DTO用于数据传输,可以用在Service层和Manager层。

Query用于查询对象封装,比如我们要去查询莎士比亚写的《哈姆雷特》,我们可以造一个BookQuery去传参数

微信公众号:Coding测试
上一篇下一篇

猜你喜欢

热点阅读