前言

在阅读《阿里巴巴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可以是不同的复杂的类型。有兴趣的同学可以去学习下。

java vo命名规则_阿里java开发手册中命名规约解读之DO/BO/DTO/VO/AO相关推荐

  1. java包名命名规则_告别编码5分钟,命名2小时!史上最全的Java命名规范参考!

    简洁清爽的代码风格应该是大多数工程师所期待的.在工作中笔者常常因为起名字而纠结,命名已经成为我工作中的拦路虎,夸张点可以说是编程5分钟,命名两小时! 每个公司都有不同的标准,目的是为了保持统一,减少沟 ...

  2. java客服系统_阿里Java内部资料:2020最全Java技术栈(架构篇+算法篇+大数据)

    我只截图不说话,PPT大全,氛围研发篇.算法篇.大数据.Java后端架构!除了大家熟悉的交易.支付场景外,支撑起阿里双十一交易1682亿元的"超级工程"其实包括以下但不限于客服.搜 ...

  3. 华为的型号命名规则_华为光模块的型号命名规则是怎样的?

    原标题:华为光模块的型号命名规则是怎样的? 我们知道光模块的外观会有标签,标签上面标记有光模块的型号和具体信息,我们常常通过光模块的标签来区分光模块.那么光模块的型号命名所代表的含义以及命名的规则是怎 ...

  4. 华为的型号命名规则_海康网络网络摄像机命名规则,海康IPC型号含义解释说明...

    海康威视作为安防第一大厂,作为相关从业人员,了解海康威视经销产品的命名规则是很有必要的.成体系的产品命名规则不仅仅是将不同的产品区分开来,同时根据产品型号也很容易知道相关产品的规格特征.以及主要性能参 ...

  5. java的变量命名规则_【Java】变量命名规范

    Java是一种区分字母的大小写的语言,所以我们在定义变量名的时候应该注意区分大小写的使用和一些规范,接下来我们简单的来讲讲Java语言中包.类.变量等的命名规范. (一)Package(包)的命名 P ...

  6. java mysql排序规则_在Java中使用MySQL排序规则

    精简版 我目前正在研究MySQL排序规则的问题以及它们如何影响一组值(使用Hibernate映射,但现在这不重要).我希望使用与MySQL使用相同的排序规则来设置一组字符串.例如.我希望"f ...

  7. 微调电位器命名规则_可调电阻器的分类、命名、及标注方法是怎样的

    可调电阻也叫可变电阻,是电阻的其中一种电子元件,顾名思义,可调电阻就是电阻值的大小可以人为调节的电阻,主要是为了满足电路的需求.可调电阻按照电阻值的大小.制作材料.调节形式.调节的范围.制作工艺.体积 ...

  8. java vo命名规则_程序员必知的Java基础:5条命名规范和8种数据类型归纳

    一.Java命名规范 任何一种语言都有一套针对于语言自身的命名的规范,java也不例外.接下来,我就列举一下java对命名的规范. 下面重点来了,准备好了嘛? 1.代码中的命名均不能以下划线或美元符号 ...

  9. java开发规范阿里_阿里-JAVA最新开发规范 PDF 下载

    主要内容: 一.编程规约 (一)命名风格 1. [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反 例 :_name / name / $name / name_ / ...

最新文章

  1. SSE3和SSSE3 Intrinsics各函数介绍
  2. 关于element的select多选选择器,数据回显的问题
  3. SLAM综述-Lidar SLAM
  4. 只知道java有反射可以说是动态语言,动态链接,早期晚期绑定、虚方法这些概念你知道吗
  5. android-Activity
  6. mybatis增删改查快速实现!!!
  7. vscode shift+ arl + f 格式化统一(笔记)
  8. 操作系统(4)-进程间通信
  9. python定义一个数列_第二章 数列和序列类型
  10. Bootstrap-CL:按钮下拉菜单
  11. LeetCode 229 : Majority Element II
  12. java怎么销毁session_java怎么销毁session?
  13. [XPlane11/12]同步更新Zibo737插件下载-更新至3.54.17-插件搬运
  14. 目标检测-RCNN系列
  15. Nagios基本介绍
  16. 微大夫感冒舒缓仪亮相“2018健康陕西发展大会”回顾
  17. 伴着代码,那个女孩儿慢慢长大
  18. 题解 P1757 【通天之分组背包】
  19. python入门(三)--文件处理
  20. 为啥干不过苹果?某手机老总一语道破心中所想,赚钱才是第一位的

热门文章

  1. 游戏AI:只是AI间的游戏,还是游戏的未来?
  2. ZBrush:关闭灯箱自动开启
  3. JAVA IO(续)
  4. popo离线文件服务器,网易POPO与网易邮箱合壁
  5. 第十三届蓝桥杯嵌入式备赛-STM32G431-进阶模块调试⑦RTC时钟
  6. 台式计算机开机黑屏,台式机开机显示器黑屏无信号怎么办?
  7. 如何关闭windows系统的默认共享
  8. 服务器芯片涨价,Q2 合约价再涨 10%、服务器内存大涨 20%:2020 年内存开启涨价模式...
  9. 每个团队都应知道的API安全威胁
  10. tortoisesvn的版本冲突