Alibaba开发规范_编程规约之命名风格

文章目录

    • 命名风格的基本原则
      • 1. 命名不能以下划线或美元符号开始或结束
      • 2. 严禁使用拼音与英文混合或直接使用中文
      • 3. 类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等
      • 4. 方法名、参数名、成员变量、局部变量使用 lowerCamelCase 风格
      • 5. 常量命名全部大写,单词间用下划线隔开
      • 6. 抽象类命名使用 Abstract 或 Base 开头,异常类命名使用 Exception 结尾
      • 7. 数组类型与中括号紧挨相连
      • 8. POJO 类中布尔类型变量不要加 is 前缀
      • 9. 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词
      • 10. 避免在子父类的成员变量之间或不同代码块的局部变量之间采用完全相同的命名
      • 11. 杜绝完全不规范的缩写
      • 12. 使用尽量完整的单词组合来表达其意
      • 13. 表示类型的名词放在词尾
      • 14. 命名时体现出设计模式
      • 15. 接口类中的方法和属性不要加任何修饰符号
      • 16. 接口和实现类的命名规则
      • 17. 枚举类名带上 Enum 后缀,枚举成员名称需要全大写
      • 18. 各层命名规约
    • 结语

在这里插入图片描述

命名风格的基本原则

1. 命名不能以下划线或美元符号开始或结束

反例:

_name = "John"
__name = "Doe"
$name = "Jane"
name_ = "Smith"
name$ = "Brown"
name__ = "Taylor"

解释: 虽然有些开源代码使用下划线开头,但这种风格在Python中通常表示内部变量。为了保持一致性,建议避免使用下划线或美元符号作为命名的开始或结束。

2. 严禁使用拼音与英文混合或直接使用中文

反例:

int DaZhePromotion = 10; // 打折
void getPingfenByName() { // 评分
    // ...
}

正例:

int discountPromotion = 10;
void getScoreByName() {
    // ...
}

解释: 使用正确的英文拼写和语法可以避免歧义,提高代码的可读性。


3. 类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等

正例:

class UserDO {
    // ...
}
class XmlService {
    // ...
}

反例:

class userDo {
    // ...
}
class XMLService {
    // ...
}

解释: 类名应使用大驼峰命名法,但一些特定缩写(如DO、DTO、VO等)可以例外。

  • DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
  • DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
  • BO( Business Object):业务对象。 由Service层输出的封装业务逻辑的对象。
  • VO( View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
  • AO (Application Object) :应用对象,在 Web 层与 Service 层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
  • POJO 是 DO / DTO / BO / VO 的统称.

4. 方法名、参数名、成员变量、局部变量使用 lowerCamelCase 风格

正例:

void getHttpMessage() {
    int localValue = 10;
    // ...
}

解释: 方法名、参数名、成员变量和局部变量应使用小驼峰命名法。


5. 常量命名全部大写,单词间用下划线隔开

正例:

final int MAX_STOCK_COUNT = 1000;
final long CACHE_EXPIRED_TIME = 3600;

反例:

final int maxCount = 1000;
final long expiredTime = 3600;

解释: 常量命名应全部大写,单词间用下划线隔开,以提高可读性。


6. 抽象类命名使用 Abstract 或 Base 开头,异常类命名使用 Exception 结尾

正例:

abstract class AbstractUser {
    // ...
}
class UserNotFoundException extends Exception {
    // ...
}

解释: 抽象类和异常类的命名应遵循特定的命名规则,以便于识别。


7. 数组类型与中括号紧挨相连

正例:

int[] arrayDemo = new int[10];

反例:

int arrayDemo[] = new int[10];

解释: 数组类型应与中括号紧挨相连,以提高代码的可读性。


8. POJO 类中布尔类型变量不要加 is 前缀

反例:

class User {
    private boolean isDeleted;
    // getter and setter
}

正例:

class User {
    private boolean deleted;
    // getter and setter
}

解释: 布尔类型变量不加 is 前缀,以避免框架解析时出现序列化错误。


9. 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词

正例:

package com.alibaba.ai.util;

解释: 包名应使用小写,点分隔符之间应有一个自然语义的英语单词。


10. 避免在子父类的成员变量之间或不同代码块的局部变量之间采用完全相同的命名

反例:

class ConfusingName {
    public int age;
    public void getData(String alibaba) {
        if (condition) {
            final int money = 531;
            // ...
        }
        for (int i = 0; i < 10; i++) {
            final int money = 615; // 与上面的 money 同名
            // ...
        }
    }
}

解释: 避免在子父类的成员变量之间或不同代码块的局部变量之间使用相同的命名,以提高代码的可读性。


11. 杜绝完全不规范的缩写

反例:

class AbsClass { // AbstractClass 的缩写
    // ...
}

正例:

class AbstractClass {
    // ...
}

解释: 避免使用不规范的缩写,以确保代码的可读性。


12. 使用尽量完整的单词组合来表达其意

正例:

class AtomicReferenceFieldUpdater {
    // ...
}

反例:

int a; // 随意命名

解释: 使用完整的单词组合可以提高代码的自解释性。


13. 表示类型的名词放在词尾

正例:

long startTime;
Queue<String> workQueue;
List<String> nameList;
int TERMINATED_THREAD_COUNT;

反例:

long startedAt;
Queue<String> QueueOfWork;
List<String> listName;
int COUNT_TERMINATED_THREAD;

解释: 表示类型的名词应放在词尾,以提高辨识度。


14. 命名时体现出设计模式

正例:

class OrderFactory {
    // ...
}
class LoginProxy {
    // ...
}
class ResourceObserver {
    // ...
}

解释: 在命名时体现出设计模式,有助于阅读者快速理解架构设计理念。


15. 接口类中的方法和属性不要加任何修饰符号

正例:

interface UserService {
    void commit();
    String COMPANY = "alibaba";
}

反例:

interface UserService {
    public abstract void f();
}

解释: 接口中的方法和属性应保持简洁,避免不必要的修饰符号。


16. 接口和实现类的命名规则

正例:

interface CacheService {
    // ...
}
class CacheServiceImpl implements CacheService {
    // ...
}

解释: 接口和实现类的命名应遵循特定的规则,以便于识别和理解。


17. 枚举类名带上 Enum 后缀,枚举成员名称需要全大写

正例:

enum ProcessStatusEnum {
    SUCCESS,
    UNKNOWN_REASON
}

解释: 枚举类名应带上 Enum 后缀,枚举成员名称应全大写。


18. 各层命名规约

A) Service/DAO 层方法命名规约

class UserService {
    User getUserById(int id) { // 获取单个对象
        // ...
    }
    List<User> listUsers() { // 获取多个对象
        // ...
    }
    int countUsers() { // 获取统计值
        // ...
    }
    void saveUser(User user) { // 插入
        // ...
    }
    void deleteUser(int id) { // 删除
        // ...
    }
    void updateUser(User user) { // 修改
        // ...
    }
}

B) 领域模型命名规约

class UserDO { // 数据对象
    // ...
}
class UserDTO { // 数据传输对象
    // ...
}
class UserVO { // 展示对象
    // ...
}

解释: 各层的命名应遵循特定的规约,以便于识别和理解。

结语

良好的命名风格是编写高质量代码的基础。通过遵循上述规约,开发者可以提高代码的可读性、可维护性和可扩展性。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/963198.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机)

Elasticsearch系列文章目录 【Elasticsearch 基础入门】一文带你了解Elasticsearch&#xff01;&#xff01;&#xff01;【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置&#xff08;单机&#xff09; 目录 Elasticsearch系列文章目录前言单机模式1. 安装 J…

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中&#xff0c;向 addConstr 这个方法中传入一个 TempConstr 对象&#xff0c;在模型中就会根据这个对象生成一个约束。更重要的是&#xff1a;TempConstr 对象可以传给所有addConstr系列方法&#xff0c;所以下面先介绍 TempConstr 对象 TempConstr TempC…

深度学习可视化指标方法工具

1. TensorBoard 简介&#xff1a;由TensorFlow提供的可视化工具&#xff0c;现已支持多种深度学习框架。 功能&#xff1a; 图可视化&#xff1a;展示计算图结构&#xff0c;帮助理解模型架构。 标量仪表板&#xff1a;跟踪损失和准确率等指标的变化。 直方图仪表板&#xf…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01

1、开发背景 大家都很熟悉&#xff0c;Oracle提供了Impdp和ExpDp工具&#xff0c;功能很强大&#xff0c;可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具&#xff0c;在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…

小程序-视图与逻辑

前言 1. 声明式导航 open-type"switchTab"如果没有写这个&#xff0c;因为是tabBar所以写这个&#xff0c;就无法跳转。路径开始也必须为斜线 open-type"navigate"这个可以不写 现在开始实现后退的效果 现在我们就在list页面里面实现后退 2.编程式导航…

list的使用,及部分功能的模拟实现(C++)

目录&#xff08;文章中"节点"和"结点"是同一个意思&#xff09; 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list…

StarRocks BE源码编译、CLion高亮跳转方法

阅读SR BE源码时&#xff0c;很多类的引用位置爆红找不到&#xff0c;或无法跳转过去&#xff0c;而自己的Linux机器往往缺乏各种C依赖库&#xff0c;配置安装比较麻烦&#xff0c;因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器&#xff0c;进行编…

Axure PR 9 旋转效果 设计交互

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们将学习Axure中的旋转效果设计与交互技巧。 旋转 创建旋转效果所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个按钮元件。 创建交互 创建按钮交互状态 1.选中按钮元件&#xf…

Java - 引用类型:强引用、软引用、弱引用和虚引用详解

文章目录 概述1. 强引用&#xff08;Strong Reference&#xff09;1.1 什么是强引用&#xff1f;1.2 强引用的特点1.3 强引用的使用场景1.4 强引用的注意事项 2. 软引用&#xff08;Soft Reference&#xff09;2.1 什么是软引用&#xff1f;2.2 软引用的特点2.3 软引用的使用场…

S4 HANA给科目分配允许记账的税码

本文主要介绍在S4 HANA OP中给科目分配允许记账的税码相关设置。具体请参照如下内容&#xff1a; 1. 给科目分配允许记账的税码 以上配置定义了总账科目可以使用什么税码进行记账。通常在科目主数据中会明确总账科目的“Tax Category”来请明确总账科目可以使用什么类型的税码…

xss-labs靶场

xss-labs靶场 xss攻击类型 反射型xss 即攻击者将恶意脚本嵌入到url或者表单中&#xff0c;当用户访问特定的url或者提交表单时&#xff08;用户端请求时)&#xff0c;恶意脚本会执行 攻击需要用户点击恶意链接或访问包含恶意参数的url触发 存储型xss 即攻击者将恶意脚本提交…

CVE-2024-23897-Jenkins任意文件读取漏洞复现

content Jenkins是什么CVE-2024-23897总结修复建议 Jenkins是什么 Jenkins是一人基于Java开发的、可扩展的持续集成引擎&#xff0c;用于持续、自动地构建/测试软件项目&#xff0c;可以监控一些定时执行的任务。 官网文档&#xff1a; Jenkins是一款开源 CI&CD 软件&…

解析 Oracle 中的 ALL_SYNONYMS 和 ALL_VIEWS 视图:查找同义词与视图的基础操作

目录 前言1. ALL_SYNONYMS 视图2. ALL_VIEWS 视图3. 扩展 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 1. ALL_SYNONYMS 视图 在 Oracle 数据库中&#xff0c;同义词&#xff08;Synonym&#xff09;是对数…

30.Word:设计并制作新年贺卡以及标签【30】

目录 NO1.2 NO3邮件合并-信函 NO4邮件合并-标签​ NO1.2 另存为/F12&#xff1a;考生文件夹&#xff1a;Word.docx布局→页面设置对话框→页边距&#xff1a;上下左右→纸张&#xff1a;宽度/高度&#xff08;先调页边距&#x1f197;&#xff09;设计→页面颜色→填充效果→…

Unity实现按键设置功能代码

一、前言 最近在学习unity2D&#xff0c;想做一个横版过关游戏&#xff0c;需要按键设置功能&#xff0c;让用户可以自定义方向键与攻击键等。 自己写了一个&#xff0c;总结如下。 二、界面效果图 这个是一个csv文件&#xff0c;准备第一列是中文按键说明&#xff0c;第二列…

一个简单的自适应html5导航模板

一个简单的 HTML 导航模板示例&#xff0c;它包含基本的导航栏结构&#xff0c;同时使用了 CSS 进行样式美化&#xff0c;让导航栏看起来更美观。另外&#xff0c;还添加了一些 JavaScript 代码&#xff0c;用于在移动端实现导航菜单的展开和收起功能。 PHP <!DOCTYPE htm…

TensorFlow 示例摄氏度到华氏度的转换(一)

TensorFlow 实现神经网络模型来进行摄氏度到华氏度的转换&#xff0c;可以将其作为一个回归问题来处理。我们可以通过神经网络来拟合这个简单的转换公式。 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 …

2.1.3 相机图像信号处理的基本流程

文章目录 ISP基本流程ISP各基本流程职责 ISP基本流程 图像信号处理将传感器采集到的Bayer阵列数据转换成符合人眼观感的图像数据。ISP(Image Signal Processing)图像信号处理基本流程包括坏点校正&#xff08;DPC, Defect Pixel Correction&#xff09;&#xff0c;黑电平校正&…

51单片机CLD1602显示万年历+闹钟+农历+整点报时

1. 硬件设计 硬件是我自己设计的一个通用的51单片机开发平台&#xff0c;可以根据需要自行焊接模块&#xff0c;这是用立创EDA画的一个双层PCB板&#xff0c;所以模块都是插针式&#xff0c;不是表贴的。电路原理图在文末的链接里&#xff0c;PCB图暂时不选择开源。 B站上传的…

颠覆AI界限!o3-mini与DeepSeek V3的巅峰对决

性能之战&#xff1a;谁才是AI推理的王者&#xff1f; 在AI技术飞速发展的今天&#xff0c;OpenAI最新发布的o3-mini模型如同一颗新星&#xff0c;闪耀在AIGC的天空中。它不仅带来了惊人的性能提升&#xff0c;还具备了多项用户友好的功能。与此同时&#xff0c;DeepSeek V3也…