概述
长久以来,一直有一个愿望,就是自己能够遵循某种规范进行实践,或者说能找一个比较经得起实践的理论来指导。 直到我们老师给我们推荐了阿里巴巴开发手册,大概看了看目录,嗯 , 是我想要的。于是,这里就趁着休息的时间来进行整理一下,一是为了记录自己的学习历程,二是为了方便复习查找。
一. 命名风格:
避免英文与 中文拼音的混合使用,且要避免纯拼音命名。
类名必需遵循驼峰形式。
常量命名全部大写,单词间用下划线隔开
抽象类命名以Abstract 或 Base 开头; 异常类命名使用Exception结尾; 测试类命名要以测试的类的名称开始,以Test结尾。
POJO类中布尔类型的变量,都不要加 is,因为部分框架解析会引起序列化错误。(RPC框架)。
包名统一使用消息额,点分隔符之间有且仅有一个自然语意的英语单词。 包名统一使用单数形式,类名可以使用复数形式。
杜绝完全不规范的缩写,避免望文不知意。
任何自定义编程元素的命名,使用尽量完整的单词组合来表达其意。以期达到代码自解释的目的。
如模块,接口,类,方法使用了设计模式,在命名时体现出具体模式。
接口中不要加任何修饰符,可以加上有效的javadoc注释。 接口中不要定义变量,可以定义整个应用的基础常量。JDK8 接口允许默认实现,这个默认方法必须是对所有实现类都有价值的默认实现。
Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀。
形容能力的接口名称,通常是--able的形式。
枚举类命建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。(枚举类就是特殊的常量类,且构造方法被默认强制是私有)。
Service/DAO层方法命名规约:
获取单个对象以 get 做前缀;
获取多个对象用 list 做前缀;
获取统计值的方法 用 count 做前缀;
插入的方法 用 save/insert 做前缀;
删除的方法用 remove/detete 做前缀.
修改的方法 用 update 做前缀。
领域模型命名规约:
数据对象: xxxDO,xxx 即为 数据表名
数据传输对象: xxxDTO, xxx 为 业务领域相关的名称;
展示对象: xxxVO, xxx 一般为网页名称;
POJO 是 DO/DTO/BO/VO的统称,禁止命名成 xxxPOJO.
常量定义:
long 或者Long,赋初始值时,必须使用大写的L. 小写的l 容易与1 混淆。
常量要按功能进行分类,分开维护。
常量复用层次有五层,分别是 跨应用共享常量,应用内共享常量,子工程内共享常量,包内共享常量,类内共享常量。
左小括号和右小括号之间与字符不要有空格。
if/for/while/sitch/do 等保留字与括号之间要有空格。
采用四个空格缩进,禁止使用tab字符。
注释的双斜线与注释内容之间有且仅有一个空格。
单行字符数限制不超过120个,超出需要换行。 第二行与第一行缩进4个空格,第三行开始不再缩进。 运算符需要与下文一起换行; 括号前不要换行。
方法定义和传入时,多个参数逗号后边必须加空格。
相同的业务逻辑之间和语义之间不需要插入空行,反之。
OOP规约:
避免通过类的对象引用来访问静态变量或者静态方法。
相同的参数类型,相同的业务含义,才可以使用 Java的可变参数,避免使用Object.
不能使用过时的类或方法。
Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象调用equals.
所有包装类对象之间 值的比较,全部使用equals.
全部的POJO类属性必须使用包装数据类型。
RPC方法的返回值和参数必须使用包装数据类型。
所有的局部变量使用基本数据类型。
定义DO/DTO/VO 等POJO类时,不要设定任何属性默认值。
序列化类新增属性时,不要修改serialVersionUID字段。
构造方法里卖弄禁止加入任何业务逻辑,如有初始化逻辑,可以放在init方法。
POJO类必须重写toString方法,如果有父类POJO类,需要调用 super.toString.
当一个类有多个构造方法,或者多个同名方法,按顺序放在一起便于阅读。
类内方法定义顺序: 共有方法或保护方法,私有方法,getter/setter方法。
getter/setter方法种不要增加业务逻辑。
循环体内,字符串的连接方式,使用 StringBuilder 的append方法进行扩展。
使用final的情况:最终类;不允许修改的域变量;不允许重写的方法;不允许重新赋值的局部变量;避免上下文重复使用的变量。
慎用Object的clone方法来拷贝对象。
工具类不允许有public或default构造方法。
集合处理:
只要重写equals,就必须重写 hashCode.
并发操作,需要加锁。
并发处理:
获取单例对象需要保证线程安全,其中的方法也要保证线程安全。
创建线程以及线程池的时候,名称必须有意义。
线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
高并发时,同步调用需要去考量锁的性能损耗。
异常日志与其它:
不要在视图模板中加入任何复杂的逻辑。
任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存。
对大段代码进行 try-catch,这是不负责任的表现。。对于非稳定代码的 catch 尽可能进行区分 异常类型,再做对应的异常处理。
最外层的业务使用者,必须处理异常,将其转化为用户可以理解的 内容。
finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch。
对于公司外的 http/api 开放接口必须 使用“错误码”;而应用内部推荐异常抛出。
应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架 SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
安全规约:
隶属于用户个人的页面或者功能必须进行权限控制校验。
用户敏感数据禁止直接展示,必须对展示数据进行脱敏。
用户请求传入的任何参数必须做有效性验证。
表单、AJAX 提交必须执行 CSRF 安全过滤
发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过 滤等风控策略。
数据库规约:
表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1 表示是,0 表示否)。
表名,字段名必须使用小写字母或数字:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。
表名不使用复数名词。
小数类型为 decimal,禁止使用 float 和 double。
varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长 度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。
表必备三字段:id, gmt_create, gmt_modified。
表的命名最好是加上“业务名称_表的作用”。
单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
超过三个表禁止 join。需要 join 的字段,数据类型必须绝对一致;多表关联查询时, 保证被关联的字段需要有索引。
SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts 最好
最后
以上就是欢喜帅哥为你收集整理的阿里巴巴开发手册笔记整理的全部内容,希望文章能够帮你解决阿里巴巴开发手册笔记整理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复