近日,从网上下载了阿里云栖社区发布的《阿里巴巴Java开发手册(正式版)》v1.1.0版。从编程以来,一直苦于没有相关的、全面的、靠谱的规范可以参考,有了这手册,日后编程也算是找到了依据。瞧,人家阿里都是按照这规则来操作的!

云栖社区此举对于普通Java开发者来说,算是功德无量,在一定程度上规范了Java开发者的编程习惯。为后来者谋福利了。

  这本手册一共分为五个部分,包括了编程规约、异常日志、MySQL规约、工程规约、安全规约。基本上从编码的各个方面都细细的理了一遍,感觉完全可以当做是公司招人的面试题,用来考较对方的编码习惯,甚至也能在一定程度上能推断出对方的编码水平,毕竟高的编码水平,其编码习惯肯定不会差到哪去。

手册的内容约束分为三种级别,分别为强制、推荐、参考。强制,即必须遵从的编码规范;推荐,则表示最好遵从该规范,有利于提高代码水平;参考,则表示需要了解即可。

花了一个上午,仔细地将这篇手册阅读了一番,结果只看了编程规约这部分,从中摘录了一些规约,我觉得日后在编码过程中需要注意及提升的地方。

命名规约

              【强制】抽象类命名使用 Abstract 或 Base 开头; 异常类命名使用 Exception 结尾; 测试类命名以它要测试的类的名称开始,以 Test 结尾。 
               点评:一直以来对于命名都比较随意,尤其是面对很长的类名及方法名时都会自己进行单词简化,时间久了,连自己都会忘记这个缩写到底是个什么意思,o(╯□╰)o。另外,这些类名的命名规则也能遵守,只是这些标识词语总是有时放开头有时放结尾,缺少些统一性。
 
       【强制】 POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。 
                点评:可能因为开发的项目少,使用的框架不够丰富,这个问题倒是从来没遇到过。当然也基本上没这么写过。
 
       【参考】各层命名规约:
A) Service/DAO 层方法命名规约
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀。
3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save(推荐) 或 insert 做前缀。
5) 删除的方法用 remove(推荐) 或 delete 做前缀。
6) 修改的方法用 update 做前缀。
B) 领域模型命名规约
1) 数据对象: xxxDO, xxx 即为数据表名。
2) 数据传输对象: xxxDTO, xxx 为业务领域相关的名称。
3) 展示对象: xxxVO, xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。 

点评:因为公司人来人往的缘故,对方法的命名从来都是自己按照自己的那套玩。就我个人习惯而言,只要是获取对象全部都是get做前缀,阿里的这种做法的确可以用来参考参考。

OOP规约

                 【强制】 POJO 类必须写 toString 方法。使用 IDE 的中工具: source> generate toString时,如果继承了另一个 POJO 类,注意在前面加一下 super.toString。

说明: 在方法执行抛出异常时,可以直接调用 POJO 的 toString()方法打印其属性值,便于排查问题。

         点评:这个提议非常好。如其所言,有利于排查问题。
 
         【强制】泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用 add 方法, 而<? super T>不能使用 get 方法,做为接口调用赋值时易出错。

说明: 扩展说一下 PECS(Producer Extends Consumer Super)原则: 1) 频繁往外读取内容的,适合用上界 Extends。 2) 经常往里插入的,适合用下界 Super。

         点评:泛型经常用。但是,泛型通配符却基本上没怎么用过。看了一下PECS原则,很有意思。如果熟练掌握的话,可以在某些特定场景中提升代码的质量。   
 
         【强制】不要在 foreach 循环里进行元素的 remove/add 操作。 remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。 
          点评:这个问题我在开发中遇到过。不过,在处理这个问题时有些笨拙。对于并发操作,我使用的是并发队列ConcurrentLinkedQueue。
 
              
             

阿里Java开发规范记录(一)的更多相关文章

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

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

  2. 阿里Java开发规范&谷歌Java开发规范&华为Java开发规范&Tab键和空格比较&Eclipse的Tab键设置 总结

    现在收集到如下有用的信息: 阿里巴巴公开的Java开发规范:https://yq.aliyun.com/articles/69327?utm_content=m_10088 google公开的Java ...

  3. 阿里java开发规范学习(附P3C IDEA插件 帮助规范的养成)

    浅析 阿里巴巴 Java 开发规约 (未完成) 更加优秀的页面展现请到浅析 阿里巴巴 Java 开发规约 contents 为什么要学 编程规约 P3C IDEA 插件 why-use 我们知道,一般 ...

  4. 阿里java开发规范 强制约束

    http://news.51cto.com/art/201901/591018.htm  :阿里开发强制要求的11条索引创建规范,提高性能 https://blog.csdn.net/Lujunwei ...

  5. Java代码规范_插件_阿里java开发手册

    给大家分享一个阿里巴巴的java开发规范,在日常自动化工作中我们可以参考一下,特别是用java进行coding的同学. 而且还可以利用相应的插件进行代码扫描检测,感兴趣的们可以马上应用到自动化中来. ...

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

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

  7. MyEclipse中阿里JAVA代码规范插件(P3C)的安装及使用

    JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...

  8. IDEA中阿里JAVA代码规范插件(P3C)的安装及使用

    JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...

  9. eclipse安装阿里巴巴java开发规范插件

    阿里巴巴java开发规范插件 作为JAVA开发人员,始终没有一个明确的规范,何为好代码,何为坏代码,造成不同人的代码风格不同,接手别人代码后改造起来相当困难.前不久,阿里巴巴发布了<阿里巴巴Ja ...

随机推荐

  1. 使用ssm整合是创建Maven项目报错Failure to transfer com.thoughtworks.xstream:xstream:pom:1.3.1

    Description Resource Path Location TypeFailure to transfer com.thoughtworks.xstream:xstream:pom:1.3. ...

  2. selenium学习笔记(xpath和css定位)

    简单的介绍下xpath和css的定位 理论知识就不罗列了 还是利用博客园的首页.直接附上代码: 这个是xpath #!/usr/bin/env python # -*- coding: utf_8 - ...

  3. python扫描proxy并获取可用代理ip列表

    mac或linux下可以work的代码如下: # coding=utf-8 import requests import re from bs4 import BeautifulSoup as bs ...

  4. dga 分析

    02n-0iy6gn3ozzwmyu.7i43n9qil1g1z2-.com0e527eaf_5ec5_4623_9fe9_e459583acd72.com0fmgm1cuu7h1279dghgka0 ...

  5. oracle数据库查看用户相关语句

    1.查看所有用户:   select * from dba_users;   select * from all_users;   select * from user_users;   2.查看用户 ...

  6. 【spark】【问题】textFile找不到文件

    2018/5/9 关于textFile读取文件的问题 问题描述: 今天第一次使用spark-shell来读取文件,我在本地建立了一个text.txt文件,然后用textFile读取生成rdd. 但是执 ...

  7. a, b交换与比较问题

    1. 求a, b中较大的数,不使用if.?.switch等判断语句. 答案: 另一种思路是求两者的差,然后通过位运算判断差值的正负,不过个人觉得还是第一种各位简洁优雅. 2. 交换a, b的值,要求不 ...

  8. Activity传递参数——传递自定义数据类型

    一.新建一个空的工程 二.在主界面中添加一个按钮 三.新建一个空的activity,并命名为TheAty 四.新建一个user类 //注意这里要实现Serializable,不然在传递参数时会出错 p ...

  9. virtual box 安装 centos 7 不能上网问题解决总结

    http://blog.csdn.net/u013264730/article/details/51146359 1.设置virtualbox 网络选项 [root@centos1 ~]# cat / ...

  10. 机器视觉:Convolutional Neural Networks, Receptive Field and Feature Maps

    CNN 大概是目前 CV 界最火爆的一款模型了,堪比当年的 SVM.从 2012 年到现在,CNN 已经广泛应用于CV的各个领域,从最初的 classification,到现在的semantic se ...