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

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

结语

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0开始,来看看怎么去linux排查Java程序故障

一&#xff0c;前提准备 最基本前提&#xff1a;你需要有liunx环境&#xff0c;如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后&#xff0c;你还需要安装jdk和配置环境变量 1. 安装JDK&#xff08;以OpenJDK 17为例&#xff09; 下载JDK…

智能园区管理系统助力企业安全与效率双提升的成功案例分析

内容概要 在当今迅速发展的商业环境中&#xff0c;企业面临着资产管理、风险控制和运营效率提高等多重挑战。为了应对这些挑战&#xff0c;智能园区管理系统应运而生&#xff0c;为企业提供了全新的解决方案。例如&#xff0c;快鲸智慧园区&#xff08;楼宇&#xff09;管理系…

nacos 配置管理、 配置热更新、 动态路由

文章目录 配置管理引入jar包添加 bootstrap.yaml 文件配置在application.yaml 中添加自定义信息nacos 配置信息 配置热更新采用第一种配置根据服务名确定配置文件根据后缀确定配置文件 动态路由DynamicRouteLoaderNacosConfigManagerRouteDefinitionWriter 路由配置 配置管理 …

Linux-CentOS的yum源

1、什么是yum yum是CentOS的软件仓库管理工具。 2、yum的仓库 2.1、yum的远程仓库源 2.1.1、国内仓库 国内较知名的网络源(aliyun源&#xff0c;163源&#xff0c;sohu源&#xff0c;知名大学开源镜像等) 阿里源:https://opsx.alibaba.com/mirror 网易源:http://mirrors.1…

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…

【ts + java】古玩系统开发总结

src别名的配置 开发中文件和文件的关系会比较复杂&#xff0c;我们需要给src文件夹一个别名吧 vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path// https://vitejs.dev/config/ export default defineConfig({pl…

使用Pygame制作“俄罗斯方块”游戏

1. 前言 俄罗斯方块&#xff08;Tetris&#xff09; 是一款由方块下落、行消除等核心规则构成的经典益智游戏&#xff1a; 每次从屏幕顶部出现一个随机的方块&#xff08;由若干小方格组成&#xff09;&#xff0c;玩家可以左右移动或旋转该方块&#xff0c;让它合适地堆叠在…

小程序设计和开发:什么是竞品分析,如何进行竞品分析

一、竞品分析的定义 竞品分析是指对竞争对手的产品进行深入研究和比较&#xff0c;以了解市场动态、发现自身产品的优势和不足&#xff0c;并为产品的设计、开发和营销策略提供参考依据。在小程序设计和开发中&#xff0c;竞品分析可以帮助开发者了解同类型小程序的功能、用户体…

Vue简介

目录 Vue是什么&#xff1f;为什么要使用Vue&#xff1f;Vue的三种加载方式拓展&#xff1a;什么是渐进式框架&#xff1f; Vue是什么&#xff1f; Vue是一套用于构建用户界面的渐进式 JavaScript (主张最少)框架 &#xff0c;开发者只需关注视图层。另一方面&#xff0c;当与…

Linux多路转接poll

Linux多路转接poll 1. poll() poll() 结构包含了要监视的 event 和发生的 event &#xff0c;接口使用比 select() 更方便。且 poll 并没有最大数量限制&#xff08;但是数量过大后性能也是会下降&#xff09;。 2. poll() 的工作原理 poll() 不再需要像 select() 那样自行…

C++【深入底层,手撕vector】

vector是向量的意思&#xff0c;看了vector的底层实现之后&#xff0c;能够很明确的认识到它其实就是我们经常使用的顺序表。在我们的认知中&#xff0c;顺序表会有一个数组、数据的size以及容量的大小。vector作为一个向量容器&#xff0c;它可以存放任意类型的数据。所以在实…

基于FPGA的BT656编解码

概述 BT656全称为“ITU-R BT.656-4”或简称“BT656”,是一种用于数字视频传输的接口标准。它规定了数字视频信号的编码方式、传输格式以及接口电气特性。在物理层面上,BT656接口通常包含10根线(在某些应用中可能略有不同,但标准配置为10根)。这些线分别用于传输视频数据、…

关于系统重构实践的一些思考与总结

文章目录 一、前言二、系统重构的范式1.明确目标和背景2.兼容屏蔽对上层的影响3.设计灰度迁移方案3.1 灰度策略3.2 灰度过程设计3.2.1 case1 业务逻辑变更3.2.2 case2 底层数据变更&#xff08;数据平滑迁移&#xff09;3.2.3 case3 在途新旧流程兼容3.2.4 case4 接口变更3.2.5…

Microsoft Power BI:融合 AI 的文本分析

Microsoft Power BI 是微软推出的一款功能强大的商业智能工具&#xff0c;旨在帮助用户从各种数据源中提取、分析和可视化数据&#xff0c;以支持业务决策和洞察。以下是关于 Power BI 的深度介绍&#xff1a; 1. 核心功能与特点 Power BI 提供了全面的数据分析和可视化功能&…

【机器学习】自定义数据集 ,使用朴素贝叶斯对其进行分类

一、贝叶斯原理 贝叶斯算法是基于贝叶斯公式的&#xff0c;其公式为&#xff1a; 其中叫做先验概率&#xff0c;叫做条件概率&#xff0c;叫做观察概率&#xff0c;叫做后验概率&#xff0c;也是我们求解的结果&#xff0c;通过比较后验概率的大小&#xff0c;将后验概率最大的…

AMS仿真方法

1. 准备好verilog文件。并且准备一份.vc文件&#xff0c;将所有的verilog file的路径全部写在里面。 2. 将verilog顶层导入到virtuoso中&#xff1a; 注意.v只要引入顶层即可。不需要全部引入。实际上顶层里面只要包含端口即可&#xff0c;即便是空的也没事。 引入时会报warni…

OpenAI o3-mini全面解析:最新免费推理模型重磅发布

引言 2025年1月31日&#xff0c;OpenAI重磅发布全新推理模型o3-mini。这款模型作为OpenAI推理系列的最新突破&#xff0c;不仅在性能和性价比方面实现跨越式提升&#xff0c;更是首次全面开放免费使用。这一重大举措彰显了OpenAI在人工智能技术普及和成本优化领域的创新决心。…

文件读写操作

写入文本文件 #include <iostream> #include <fstream>//ofstream类需要包含的头文件 using namespace std;void test01() {//1、包含头文件 fstream//2、创建流对象ofstream fout;/*3、指定打开方式&#xff1a;1.ios::out、ios::trunc 清除文件内容后打开2.ios:…

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

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

99.24 金融难点通俗解释:MLF(中期借贷便利)vs LPR(贷款市场报价利率)

目录 0. 承前1. 什么是MLF&#xff1f;1.1 专业解释1.2 通俗解释1.3 MLF的三个关键点&#xff1a; 2. 什么是LPR&#xff1f;2.1 专业解释2.2 通俗解释2.3 LPR的三个关键点&#xff1a; 3. MLF和LPR的关系4. 传导机制4.1 第一步&#xff1a;央行调整MLF4.2 第二步&#xff1a;银…