当前位置: 首页 > article >正文

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 { // 展示对象// ...
}

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

结语

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

在这里插入图片描述

相关文章:

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

文章目录 命名风格的基本原则1. 命名不能以下划线或美元符号开始或结束2. 严禁使用拼音与英文混合或直接使用中文3. 类名使用 UpperCamelCase 风格&#xff0c;但以下情形例外&#xff1a;DO / BO / DTO / VO / AO / PO / UID 等4. 方法名、参数名、成员变量、局部变量使用 low…...

MATLAB中的IIR滤波器设计

在数字信号处理中&#xff0c;滤波器是消除噪声、提取特征或调整信号频率的核心工具。其中&#xff0c;无限脉冲响应&#xff08;IIR&#xff09;滤波器因其低阶数实现陡峭滚降的特性&#xff0c;被广泛应用于音频处理、通信系统和生物医学工程等领域。借助MATLAB强大的工具箱&…...

vector容器(详解)

本文最后是模拟实现全部讲解&#xff0c;文章穿插有彩色字体&#xff0c;是我总结的技巧和关键 1.vector的介绍及使用 1.1 vector的介绍 https://cplusplus.com/reference/vector/vector/&#xff08;vector的介绍&#xff09; 了解 1. vector是表示可变大小数组的序列容器。…...

nginx目录结构和配置文件

nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件暂存目录 ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相关参…...

deepseek本地部署会遇到哪些坑

在本地部署DeepSeek(或其他类似AI模型)时,可能会遇到以下常见问题及解决方案: 1. 硬件资源不足 问题表现: GPU不兼容(如型号过旧)、显存不足(OOM错误)或CPU模式性能极低。解决方案: 确认GPU支持CUDA,检查显存需求(如至少16GB显存)。使用nvidia-smi监控显存,通过降…...

使用 PyTorch 实现逻辑回归并评估模型性能

1. 逻辑回归简介 逻辑回归是一种用于解决二分类问题的算法。它通过一个逻辑函数&#xff08;Sigmoid 函数&#xff09;将线性回归的输出映射到 [0, 1] 区间内&#xff0c;从而将问题转化为概率预测问题。如果预测概率大于 0.5&#xff0c;则将样本分类为正类&#xff1b;否则分…...

python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像匹配

【1】引言 前序学习了图像的常规读取和基本按位操作技巧&#xff0c;相关文章包括且不限于&#xff1a; python学opencv|读取图像-CSDN博客 python学opencv|读取图像&#xff08;四十九&#xff09;原理探究&#xff1a;使用cv2.bitwise()系列函数实现图像按位运算-CSDN博客…...

【VUE案例练习】前端vue2+element-ui,后端nodo+express实现‘‘文件上传/删除‘‘功能

近期在做跟毕业设计相关的数据后台管理系统&#xff0c;其中的列表项展示有图片展示&#xff0c;添加/编辑功能有文件上传。 “文件上传/删除”也是我们平时开发会遇到的一个功能&#xff0c;这里分享个人的实现过程&#xff0c;与大家交流谈论~ 一、准备工作 本次案例使用的…...

使用真实 Elasticsearch 进行高级集成测试

作者&#xff1a;来自 Elastic Piotr Przybyl 掌握高级 Elasticsearch 集成测试&#xff1a;更快、更智能、更优化。 在上一篇关于集成测试的文章中&#xff0c;我们介绍了如何通过改变数据初始化策略来缩短依赖于真实 Elasticsearch 的集成测试的执行时间。在本期中&#xff0…...

【R语言】函数

一、函数格式 如下所示&#xff1a; hello&#xff1a;函数名&#xff1b;function&#xff1a;定义的R对象是函数而不是其它变量&#xff1b;()&#xff1a;函数的输入参数&#xff0c;可以为空&#xff0c;也可以包含参数&#xff1b;{}&#xff1a;函数体&#xff0c;如果…...

Vue 3 30天精进之旅:Day 12 - 异步操作

在现代前端开发中&#xff0c;异步操作是一个非常常见的需求&#xff0c;例如从后端API获取数据、进行文件上传等任务。Vue 3 结合组合式API和Vuex可以方便地处理这些异步操作。今天我们将重点学习如何在Vue应用中进行异步操作&#xff0c;包括以下几个主题&#xff1a; 异步操…...

VSCode插件Live Server

简介&#xff1a;插件Live Server能够实现当我们在VSCode编辑器里修改 HTML、CSS 或者 JavaScript 文件时&#xff0c;它都能自动实时地刷新浏览器页面&#xff0c;让我们实时看到代码变化的效果。再也不用手动刷新浏览器了&#xff0c;节省了大量的开发过程耗时&#xff01; 1…...

50. 正点原子官方系统镜像烧写实验

一、Windows下使用OTG烧写系统 1、在Windos使用NXP提供的mfgtool来向开发烧写系统。需要用先将开发板的USB_OTG接口连接到电脑上。 Mfgtool工具是向板子先下载一个Linux系统&#xff0c;然后通过这个系统来完成烧写工作。 切记&#xff01;使用OTG烧写的时候要先把SD卡拔出来&…...

在C#中,什么是多态如何实现

在C#中,什么是多态?如何实现? C#中的多态性 多态性是面向对象编程的一个核心概念,他允许对象以多种形式表现.在C#中,多态主要通过虚方法,抽象方法和接口来实现. 多态性的存在使得同一个行为可以有多个不同的表达形式 即同一个接口可以使用不同的实例来执行不同的操作 虚方…...

搜索引擎友好:设计快速收录的网站架构

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/14.html 为了设计一个搜索引擎友好的网站架构&#xff0c;以实现快速收录&#xff0c;可以从以下几个方面入手&#xff1a; 一、清晰的目录结构与层级 合理划分内容&#xff1a;目录结构应…...

扩散模型(三)

相关阅读&#xff1a; 扩散模型&#xff08;一&#xff09; 扩散模型&#xff08;二&#xff09; Latent Variable Space 潜在扩散模型&#xff08;LDM&#xff1b;龙巴赫、布拉特曼等人&#xff0c;2022 年&#xff09;在潜在空间而非像素空间中运行扩散过程&#xff0c;这…...

it基础使用--5---git远程仓库

it基础使用–5—git远程仓库 1. 按顺序看 -git基础使用–1–版本控制的基本概念 -git基础使用–2–gti的基本概念 -git基础使用–3—安装和基本使用 -git基础使用–4—git分支和使用 2. 什么是远程仓库 在第一篇文章中&#xff0c;我们已经讲过了远程仓库&#xff0c;每个本…...

Baklib如何改变内容管理平台的未来推动创新与效率提升

内容概要 在信息爆炸的时代&#xff0c;内容管理平台成为了企业和个人不可或缺的工具。它通过高效组织、存储和发布内容&#xff0c;帮助用户有效地管理信息流。随着技术的发展&#xff0c;传统的内容管理平台逐渐暴露出灵活性不足、易用性差等局限性&#xff0c;这促使市场需…...

100.1 AI量化面试题:解释夏普比率(Sharpe Ratio)的计算方法及其在投资组合管理中的应用,并说明其局限性

目录 0. 承前1. 夏普比率的基本概念1.1 定义与计算方法1.2 实际计算示例 2. 在投资组合管理中的应用2.1 投资组合选择2.2 投资组合优化 3. 夏普比率的局限性3.1 统计假设的限制3.2 实践中的问题 4. 改进方案4.1 替代指标4.2 实践建议 5. 回答话术 0. 承前 如果想更加全面清晰地…...

Ubuntu 下 nginx-1.24.0 源码分析 ngx_debug_init();

目录 ngx_debug_init() 函数&#xff1a; NGX_LINUX 的定义&#xff1a; ngx_debug_init() 函数&#xff1a; ngx_debug_init() 函数定义在 src\os\unix 目录下的 ngx_linux_config.h 中 #define ngx_debug_init() 也就是说这个环境下的 main 函数中的 ngx_debug_init() 这…...

基于人脸识别的课堂考勤系统

该项目是一个基于人脸识别的课堂考勤系统&#xff0c;使用Python开发&#xff0c;结合了多种技术实现考勤功能。要开发类似的基于人脸识别的考勤系统&#xff0c;可参考以下步骤&#xff1a; 环境搭建&#xff1a;利用Anaconda创建虚拟环境&#xff0c;指定Python版本为3.8&am…...

开启 AI 学习之旅:从入门到精通

最近 AI 真的超火,不管是工作还是生活里,到处都能看到它的身影。好多小伙伴都跑来问我,到底该怎么学 AI 呢?今天我就把自己学习 AI 的经验和心得分享出来,希望能帮到想踏入 AI 领域的朋友们! 一、学习内容有哪些 (一)编程语言 Python 绝对是首选!它在 AI 领域的生态…...

13 尺寸结构模块(size.rs)

一、size.rs源码 // Copyright 2013 The Servo Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE…...

16.[前端开发]Day16-HTML+CSS阶段练习(网易云音乐五)

完整代码 网易云-main-left-rank&#xff08;排行榜&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&q…...

ARM嵌入式学习--第十天(UART)

--UART介绍 UART(Universal Asynchonous Receiver and Transmitter)通用异步接收器&#xff0c;是一种通用串行数据总线&#xff0c;用于异步通信。该总线双向通信&#xff0c;可以实现全双工传输和接收。在嵌入式设计中&#xff0c;UART用来与PC进行通信&#xff0c;包括与监控…...

MoonBit 编译器(留档学习)

MoonBit 编译器 MoonBit 是一个用户友好&#xff0c;构建快&#xff0c;产出质量高的编程语言。 MoonBit | Documentation | Tour | Core This is the source code repository for MoonBit, a programming language that is user-friendly, builds fast, and produces high q…...

【TypeScript】基础:数据类型

文章目录 TypeScript一、简介二、类型声明三、数据类型anyunknownnervervoidobjecttupleenumType一些特殊情况 TypeScript 是JavaScript的超集&#xff0c;代码量比JavaScript复杂、繁多&#xff1b;但是结构更清晰 一、简介 为什么需要TypeScript&#xff1f; JavaScript的…...

Unity游戏(Assault空对地打击)开发(3) 摄像机的控制

详细步骤 打开My Assets或者Package Manager。 选择Unity Registry。 搜索Cinemachine&#xff0c;找到 Cinemachine包&#xff0c;点击 Install按钮进行安装。 关闭窗口&#xff0c;新建一个FreeLook Camera&#xff0c;如下。 接着新建一个对象Pos&#xff0c;拖到Player下面…...

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)

目录 1 -> 生命周期 1.1 -> 应用生命周期 1.2 -> 页面生命周期 2 -> 资源限定与访问 2.1 -> 资源限定词 2.2 -> 资源限定词的命名要求 2.3 -> 限定词与设备状态的匹配规则 2.4 -> 引用JS模块内resources资源 3 -> 多语言支持 3.1 -> 定…...

小程序-基础加强-自定义组件

前言 这次讲自定义组件 1. 准备今天要用到的项目 2. 初步创建并使用自定义组件 这样就成功在home中引入了test组件 在json中引用了这个组件才能用这个组件 现在我们来实现全局引用组件 在app.json这样使用就可以了 3. 自定义组件的样式 发现页面里面的文本和组件里面的文…...