前言


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

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

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

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

领域模型命名规约


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可以是不同的复杂的类型。有兴趣的同学可以去学习下。

阿里java开发手册中命名规约解读之DO/BO/DTO/VO/AO的更多相关文章

  1. 阅读阿里Java开发手册记录

    概述 在阅读完阿里Java开发手册(嵩山版)后,发现自己在开发过程中有一些没有按照规范开发的情况,这里将容易忘记的规范记录下来,并且添加自己的理解,一方面方便自己巩固记忆,另一方面希望对其他同学能够提 ...

  2. 阿里Java开发手册1.3.0 文字版

    版本: 1.3.0 update: 2017.9.25 一.编程规约 (一) 命名风格 1. [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例:_name _na ...

  3. 为什么阿里巴巴Java开发手册中强制要求整型包装类对象值用 equals 方法比较?

    在阅读<阿里巴巴Java开发手册>时,发现有一条关于整型包装类对象之间值比较的规约,具体内容如下: 这条建议非常值得大家关注, 而且该问题在 Java 面试中十分常见. 还需要思考以下几个 ...

  4. 阿里JAVA开发手册零度的思考理解(一)

    转载请注明原创出处,谢谢! 缘由 阿里JAVA开发手册已经发表有很长时间了,值得认真研究思考推广 阿里官方的Java代码规范标准,这份开发手册不仅规范了一些开发细节,也提出了很多工程开发的哲学,值得好 ...

  5. 阿里JAVA开发手册零度的思考理解(二)

    转载请注明原创出处,谢谢! 说在前面 人生的大道上默默地走,就必须要有一盏灯亮着为你引导方向!而这盏灯抑或只是一句话,一句鼓励,一个赞美,一次承认,一次认可,一次相识一次交流-- 上篇文章:阿里JAV ...

  6. 【转】线程池体系介绍及从阿里Java开发手册学习线程池的正确创建方法

    jdk1.7中java.util.concurrent.Executor线程池体系介绍 java.util.concurrent.Executor : 负责线程的使用与调度的根接口  |–Execut ...

  7. Java开发手册之编程规约

    时隔一年多,再次开始更新博客,各位粉丝们久等了.大家是不是以为我像大多数开发者一样三分钟热度,坚持了一年半载就放弃了,其实不是.在过去的一年时间我学习了<Java编程思想>这本书,因为都是 ...

  8. 品阿里 Java 开发手册有感

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 一个优秀的工程师和一个普通的工程师的区别,不是满天飞的架构图, ...

  9. 为什么阿里巴巴Java开发手册中不允许魔法值出现在代码中?

    在阅读<阿里巴巴Java开发手册>时,发现有一条关于关于常量定义的规约,具体内容如下: 图中的反例是将数据缓存起来,并使用魔法值加链路 id 组成 key,这就可能会出现其他开发人员在复制 ...

随机推荐

  1. Java学习笔记26(Math类、Arrays类、BigInteger类、BigDecimal类)

    Math类:数学工具类,做一些数学计算,开方,对数,三角函数等 所有方法都是静态方法,不需要建立对象,直接用类名调用即可 示例: 这里写几个在日常开发中会用到的,比如三角函数之类的平时不会用到,了解即 ...

  2. iOS开发的另类神器:libimobiledevice开源包【类似android adb 方便获取iOS设备信息】

    简介 libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备.由于苹果官方并不支持Linux系统,但是Linux上 ...

  3. [转载]解决sudo: sorry, you must have a tty to run sudo

    前几天遇到一个问题,在一个终端中调用另一个shell,始终是无法执行的,后来捕捉到报错信息为sudo: sorry, you must have a tty to run sudo,后来,在网上了解到 ...

  4. CSS基础知识(display和visibility、overflow、文档流)

    9.显示与隐藏 u  display属性: (1)none:隐藏元素,不会再占有页面的任何空间,即不会影响布局. (2)inline:默认值.将元素[显示]为内联元素     (与HTML元素本身无关 ...

  5. windbg关于.NET分析的扩展命令

    收到一个dump文件,运行环境的.net framework的详细版本是多少呢? dump信息与性能计数器结合分析时,想知道该dump运行的进程号是多少? dump定位到有效的堆栈信息,而对应的源码是 ...

  6. Nexus 6P 解锁+TWRP+CM

    // 这是一篇导入进来的旧博客,可能有时效性问题. 1. 需要用到的文件:Google USB驱动:adb和fastboot工具二进制文件(如果解锁时提示命令无效说明版本过低,需下载使用支持nexus ...

  7. js时间戳与日期格式的相互转换

    下面总结一下js中时间戳与日期格式的相互转换: 1. 将时间戳转换成日期格式: function timestampToTime(timestamp) { var date = new Date(ti ...

  8. poj1830:开关问题

    链接:http://poj.org/problem?id=1830 某天“佐理慧学姐”突然来问了我这道题. 诶,窝只会线性基,但是好像搞不了方案数啊…… 啃题解吧. woc!线性代数哦,就是那种我不会 ...

  9. android下载管理、理财、浏览器、商品筛选、录音源码等

    Android精选源码 android仿美拍直播的点赞动画   android视频播放器完美切换全屏.小窗口源码   android类似随手记理财类源码   android简单浏览器源码   andr ...

  10. Windows系统下文件的概念及c语言对其的基本操作(乙)