• 阿里java开发手册中命名规约解读之DO/BO/DTO/VO/AO


    前言


    在阅读《阿里巴巴Java开发手册》时,看到命名规则中有这样一条

    虽然知道这些是根据Java对象的角色所分配名称的后缀,但是没有弄清楚分别是什么意思,日常开发中也没有使用到。

    网上查找了一些资料,但是感觉大多数都是一样的,可能大家都是互相copy,篇幅过长并且不易理解。

    别灰心!《阿里巴巴Java开发手册》中对于上面这些在领域模型的命名使用上给出了规范,说的很清楚,分享给大家。

    补充一个链接,内容是《阿里巴巴Java开发手册纪念版》以及历时一年推出的代码规范插件。https://github.com/alibaba/p3c

    领域模型命名规约


    1.数据对象:xxxDO,xxx即为数据表名

    2.数据传输对象:xxxDTO,xxx为业务领域相关的名称;

    3.展示对象:xxxVO,xxx一般为网页的名称;

    4.POJO 是DO/DTO/BO/VO的统称禁止命名成xxxPOJO。

    个人解读


    1.如果你写的web应用是一个CRUD的demo,那么一个DO就完全够用。

    例如,写一个用户的增删改查,数据库中有一个user表,你建立一个UserDO,类中的字段和数据库中一致,当你需要对User操作时,就用UserDO进行数据存取。

    那么问题来啦:

    首先,例如user表中有一个叫做passWord的字段,保存了登录密码,这个字段肯定是不需要返回到页面上的,但是如果像上面的操作,直接把UserDO的对象返回给前台,必然会带来安全隐患;

    其次,如果User中有些字段需要转换后才能正确显示(例如显示中文,保存的是英文,或者保存的是关联表中的id),直接返回UserDO就只能在页面上用js写if...else...来区分值,很繁琐;

    最后,如果你的页面上显示的数据是一个很大的结果集(调用了好几个接口的返回结果),例如除了User信息还有Account信息,一个UserDO显然就不够用了;

    VO的概念应运而生。

    2.VO中我们写的字段都是前台所需要的,而不是对象的所有字段值;

    VO中的字段格式都是符合前台页面显示所需的,需要中文就显示中文;

    对于调用了好几个接口返回的结果集,可以封装一个VO,将所有结果整合后再返回给前端页面。

    3.有些人肯定在想,我的DO和VO中字段大多数都是相同的,有必要再写这样一个类吗?

    答案是有的!如果写的是比较小的web应用,字段不多,你觉得没有这个必要。但是如果写的是大一些的系统,字段越多,分层的优势就会越明显。(博主写的web不大,但是拿出一个类也是一百多个字段,深感头疼)

    DO和VO之间的转换


    1.两个POJO之间的属性值进行copy,最原始的方法就是手动复制,但是这样就会产生大量的set,get代码,业务逻辑才是重点好吗?!不能喧宾夺主;

    2.还有种方法就是用Spring提供的BeanUtils,博主现在的项目中用的就是这个,感觉还可以,但是也有点小问题,例如copy日期需要先注册等;

    3.使用Dozer。Dozer是一个对象转换工具,可以在两个JavaBean之间进行递归数据复制,并且这些JavaBean可以是不同的复杂的类型。有兴趣的同学可以去学习下。

    欢迎讨论,共同学习! 码字排版不易,转载请在文章明显处注明出处并附原文链接!
  • 相关阅读:
    BZOJ3744 : Gty的妹子序列
    BZOJ2827 : 千山鸟飞绝
    BZOJ3547 : [ONTAK2010]Matchings
    BZOJ1185 : [HNOI2007]最小矩形覆盖
    BZOJ3046 : lagoon
    BZOJ3743 : [Coci2014]Kamp
    BZOJ3742 : Painting
    iOS移动开发周报-第25期
    适合码农工作时玩的游戏:Scrum
    iOS移动开发周报-第24期
  • 原文地址:https://www.cnblogs.com/optblogs/p/8398813.html
Copyright © 2020-2023  润新知