近日,从网上下载了阿里云栖社区发布的《阿里巴巴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. ubuntu 14.04中安装 ruby on rails 环境(填坑版) 呕血推荐

    环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 开发相关: ruby 2.2.0 rails 4.2.0 sublime text 3 本文说明:所有的命令均在$ 之后,若 ...

  2. js:s上次预览,上传图片预览,图片上传预览

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Android GridView 行间距过大(一页一行)

    1. gridView.xml中 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  4. 异步请求(ajax,http) 之 逐渐完善的大全

    异步请求在我们的开发之中是经常需要学习和理解的内容,我们将会在这一篇文章中依据不同的语言和环境内容进行归类讲解. JS: ajax是我们最为常用的页面异步请求,在只需要修改部分页面内容而不需要更换全部 ...

  5. 【python】imp模块的使用

    是import在程序中的使用 [一]函数load_source imp.load_source(moduleName, sourceFile) 使用: abc = imp.load_source('d ...

  6. socket编程再分析(-)——基础

    linux 网络编程-基础篇 0.Socket简介 socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Inter ...

  7. 第二章 Linux目录介绍

    一级目录 /bin (普通用户)二进制命令所在目录 备注 /boot LINUX内核及系统引导程序所需的文件目录 常见分区:128M swap内存的1.5倍 /dev 设备文件的目录 比如声卡.磁盘. ...

  8. OpenCV - 图片二值化,计算白色像素点的个数

    直接上代码吧: import cv2 import numpy as np from PIL import Image area = def getWhitePixel(img): global ar ...

  9. tab显示不同数据

    效果 核心代码 [js] [#escape x as (x)!?html]<!doctype html><html lang="zh-CN"><hea ...

  10. win10如何在局域网中设置一台电脑的固定ip地址

    在工作和生活中,经常要遇到远程访问一台电脑的情况,但是在局域网中如果不进行设置,通常一台电脑的ip是自动生成的,,没有固定,这就导致下次访问这个地址时,不能正常访问,下面就交大家如何在win10系统中 ...