阿里巴巴开发规范文档解读(二):常量定义、代码格式、OOP规约

本文主要是介绍阿里巴巴开发规范文档解读(二):常量定义、代码格式、OOP规约,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

与第一部分相比,这部分有较少的个人见解,算是开发文档的阉割版,整理了一些需要使用到的规范,放弃了一些常用、熟悉的规范。

二、常量定义

1.不允许任何魔法数值(未经预先定义的常量)出现在代码中
反例 ; int priceTable[] = new int[16]; //ERROR:这个16究竟有何含义呢?
正例 : static final int PRICE_TABLE_MAX = 16; //带名字int price Table[] = new int [PRICE_TABLE_MAX]; //名字的含义是很清楚的
2.不要使用一个大而全的常量维护所有常量,按常量的功能进行归类,分开维护。
例如:连接mongo数据库使用的连接名、字段名等使用一个 MongoDBConstants对于异常报的各种错误码可使用 ExceptionConstants

三、代码格式

1.if、for、switch、do、while等保留字与括号之间必须加空格
反例:if(a > 9)...
正例:if (a > 9)...
2.注释的双斜线与注释之间有且仅有一个空格
正例:
// 这是示例注释,请注意在双斜线之后有一个空格
String cs = "";
3.不同逻辑、不同语义、不同业务的代码之间插入一个空格分开来以提升可读性,没有必要查多行空格

四、OOP规约

1.避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。
解读:如果使用一个类(类名为B)的静态方法(public static methodA()),直接使用B.methodB()即可,而不是使用 B b = new B(); b.methodB();
2.方法覆写使用@Override注解
例:impl实现Service,所有方法都使用@Override注解
3.可变参数:必须放在参数列表最后
例: public User getUsers(String type, Integer... ids)
4.接口过时必须加@Deprecated注解,并说明新服务是什么
5.基本数据类型和包装类型
i.所有POJO类属性必须使用包装数据类型
ii.RPC方法的返回值必须使用包装数据类型
iii.所有的局部变量使用基本数据类型
6.序列化类新增属性时,请不要修改serialVersionUID字段,避免反序列失败
7.构造方法里边禁止加入任何业务逻辑,如果有初始化逻辑,放在init方法中
8.POJO类必须写toString方法。因为现在都引用了lombok,可以使用@ToString注解
9.类内方法定义的顺序依次是:公有方法或保护方法 > 私有方法 > getter/setter方法
10.谨慎使用object的Clone方法
11.类成员与方法访问控制从严:
成员变量:
1) 类非static成员变量并且与子类共享,必须是protected; 类成员变量(static OR 非static)且仅在本类使用,必须是private。
理解:i.这个protected使用场景很少,但是使用出来绝对是亮点。在model中,所有字段都有set、get方法,因此model很少用到protected,且由于封装特性,几乎都是private。ii.例:在一些service中使用mongoDB,是逃不脱使用MongoOperation或者MongoTemplate,因此我们可以在基类中定义 @Autowired private MongoTempate mongoTemplate;
2) 若是static成员变量,必须考虑是否为final。
方法:
3) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。 
4) 工具类不允许有public或default构造方法i.工具类里面的方法全部都是static的,它的构造方法必须是private的,这样可以通过 类名.方法名 调用方法。ii.使用private修饰构造方法时,这个类不能被实例化(无法通过new或者反射创建对象),也不能被继承,因此避免了创建多余的对象。iii.一般的model是需要使用new来直接创建对象的,因此它的构造方法并不是private的。	
6) 类成员方法只供类内部调用,必须是private。 
7) 类成员方法只对继承类公开,那么限制为protected。

这篇关于阿里巴巴开发规范文档解读(二):常量定义、代码格式、OOP规约的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005912

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho