JAVA后端开发——类命名规范

引言

良好的命名规范是软件工程的基石。它不仅能提升代码的可读性,还能降低团队协作的沟通成本,使项目在长期迭代中更易于维护。本规范结合了业界主流实践(如阿里巴巴Java开发手册)以及现代Web应用分层架构的特点,旨在提供一套清晰、一致的命名指导。

一、 核心分层命名规范

后端应用通常采用分层架构,每一层都有其特定的职责和命名后缀。

1、Controller (控制层)

  • 后缀: Controller
  • 职责: 接收并处理前端HTTP请求,对请求参数进行基础校验,调用Service层处理业务,并最终向前端返回响应数据(通常是 AjaxResult 或 ResponseEntity)。
  • 示例: UserController, OrderController, HotProductController

2、Service (服务层)

职责: 编排和实现核心业务逻辑。它是业务功能的载体,处理复杂的业务规则、事务管理等。

接口:

  • 前缀: I (Interface)
  • 后缀: Service
  • 示例: IUserService, IOrderService, IHotProductService

实现类:

  • 后缀: ServiceImpl
  • 示例: UserServiceImpl, OrderServiceImpl, HotProductServiceImpl

3、Mapper / Repository / DAO (数据访问层)

职责: 直接与数据库进行交互,执行SQL语句,完成数据的增、删、改、查(CRUD)操作

MyBatis :

  • 后缀: Mapper
  • 示例: UserMapper, OrderMapper

JPA:

  • 后缀: Repository
  • 示例: UserRepository, OrderRepository

二、 数据对象 (Domain / POJO) 命名规范

数据对象是应用中信息流转的载体,根据其用途的不同,可以细分为多种类型。

1、Entity / DO (Domain Object - 领域对象/实体类)

  • 命名: 直接使用业务名词的驼峰式命名,无任何后缀。
  • 职责: 与数据库中的表结构一一对应,是数据的持久化模型。一个Entity实例代表了表中的一条记录。
  • 示例: User, Order, Product (若依框架中常带有Sys前缀,如 SysUser, SysRole)

2、DTO (Data Transfer Object - 数据传输对象)

      • 后缀: Dto (推荐,首字母小写),而非 DTO。这是为了遵循Java的驼峰命名法,保持风格统一。
      • 职责: 在不同服务层、模块或应用之间传递数据。它是一个纯粹的数据载体,不应包含业务逻辑。通常用于Service层返回给Controller层,或作为通用API的响应体。
      • 示例: UserDto, ProductDto, HotProductDto

      3、VO (View Object - 视图对象)

      • 后缀: Vo
      • 职责: 专门用于封装前端界面需要展示的数据。它完全根据UI的需求来定义,可能来自多个Entity或DTO的组合。
      • 说明: 在简单的项目中,DTO和VO的职责可能会合并,统一使用DTO。但在复杂的前端界面,定义专门的VO会让结构更清晰。
      • 示例: UserLoginVo, DashboardStatisticsVo

      4、Query / Param (查询参数对象)

      • 后缀: Query 或 Param
      • 职责: 用于封装来自前端的GET请求的查询条件。将多个查询参数封装成一个对象,可以使Controller的方法签名更整洁。
      • 示例: UserQuery, OrderQuery, HotProductQuery

      5、Request / Form (请求体对象)

      • 后缀: Request 或 Form
      • 职责: 用于封装POST、PUT等请求的请求体(Request Body)。
      • 示例: CreateUserRequest, UpdateProductForm, LoginForm

      6、Response (特定响应对象)

      • 后缀: Response
      • 职责: 用于封装特定接口的响应数据。当一个接口的返回结构非常独特,不适合使用通用的DTO时,应为其定义专门的Response类。这能让接口的输入输出(XxxRequest/XxxResponse)形成清晰的对应关系。
      • 示例: BatchDeleteUserResponse (返回批量删除的成功和失败详情), FileUploadResponse

      三、 其他常见类命名规范

      1、配置类:

      • 后缀: Config
      • 示例: MyBatisConfig, SecurityConfig

      2、自定义异常类:

      • 后缀: Exception
      • 示例: UserNotFoundException, PermissionDeniedException

      3、工具类:

      • 后缀: Utils 或 Util
      • 示例: StringUtils, DateUtils, JwtUtil

      4、枚举类:

      • 后缀: Enum (可选,但推荐)
      • 示例: OrderStatusEnum, UserTypeEnum

      5、过滤器/拦截器:

      • 后缀: Filter 或 Interceptor
      • 示例: JwtAuthenticationTokenFilter, RepeatableFilter

      6、监听器/处理器:

      • 后缀: Listener 或 Handler
      • 示例: OrderCreatedListener, GlobalExceptionHandler

      7、测试类:

      • 后缀: Test 或 Tests
      • 示例: UserServiceTest, UserControllerTests

        四、 总结与最佳实践

        一致性是首要原则: 在一个项目中,务必遵循同一种命名风格。

        见名知意: 类名应清晰地反映其职责,避免使用模棱两可或过于简写的词语。例如 CreateUserRequest 远胜于 CrtUsrReq。

        遵循Java驼峰命名法: 类名使用大驼峰(PascalCase),例如 HotProductController。对于缩写词,将其视为一个普通单词处理,例如 Dto、Vo、Url,而非 DTO、VO、URL。

        参考现有代码: 在加入一个新项目时,花时间阅读已有的代码,了解并遵循项目既有的命名规范。

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

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

        相关文章

        Ubuntu2404修改国内镜像

        文章目录1 备份原文件2 修改文件内容Ubuntu2404修改国内镜像 2404和2204修改镜像的方式不一致 且镜像保存的位置也不一致,位置在/etc/apt/source.list.d/ubuntu.sources 参考:https://blog.csdn.net/Kiffy_Yam/article/details/145876447 1 备份原文件…

        Chrome拓展 Video Speed Controller 等内嵌恶意后门

        【高危】Chrome拓展 Video Speed Controller 等内嵌恶意后门 漏洞描述 当用户安装受影响版本的 Video Speed Controller 等Chrome拓展会窃取用户的浏览链接,并与攻击者可控的C2地址建立持久化连接,攻击者可将用户浏览器重定向到恶意网站。 MPS编号MPS…

        Spring Ai Alibaba Gateway 实现存量应用转 MCP 工具

        作者简介:你好,我是影子,Spring Ai Alibaba开源社区 Committer,持续分享Spring Ai Alibaba最新进展 业界各类AI工程相关的方案 最近有断时间没更了,熟悉我的朋友知道我刚结束完毕业旅行,最近也因为入职&a…

        HTTP和HTTPS部分知识点

        HTTP基本概念 超文本-传输-协议 协议 HTTP是一个用在计算机世界里的协议。它使用计算机可以理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。传输 HTTP协议是一个双向协议。是一个在计算机世界…

        第10讲——一元函数积分学的几何应用

        文章目录定积分计算平面图形的面积直角坐标系下参数方程下极坐标系下定积分计算旋转体的体积曲边梯形绕x轴旋转一周所得到的旋转体的体积曲边梯形绕y轴旋转一周所得到的旋转体的体积平面曲线绕定直线旋转定积分计算函数的平均值定积分计算平面光滑曲线的弧长曲线L绕x轴旋转一周…

        Go从入门到精通(20)-一个简单web项目-服务搭建

        Go从入门到精通(15)-包(package) Go从入门到精通(9)-函数 文章目录Go从入门到精通(15)-包(package)Go从入门到精通(9)-函数前言gogin…

        Python爬虫实战:研究python-docx库相关技术

        1. 引言 1.1 研究背景与意义 随着学术资源数字化程度的提高,科研工作者面临海量文献数据的筛选与分析挑战。传统人工调研方式效率低下,难以全面捕捉研究领域的动态趋势。自动化文献分析系统能够通过爬虫技术快速采集多源数据,并通过文本挖掘提取关键信息,为研究方向选择、…

        Django中序列化与反序列化

        1:序列化:将数据结构或对象状态转换为可以存储或传输的格式(如JSON、XML)的过程。在Web开发中,通常是将模型实例(或查询集)转换为JSON格式,以便通过HTTP响应发送给客户端。序列化&am…

        【离线数仓项目】——电商域DWD层开发实战

        摘要本文主要介绍了离线数仓项目中电商域DWD层的开发实战。DWD层是数据仓库架构中的明细数据层,对ODS层的原始数据进行清洗、规范、整合与业务建模。它具有数据清洗、标准化、业务建模、整合、维度挂载等作用,常见设计特征包括一致性、明细级建模、保留历…

        爬虫-正则使用

        1.模块选择用re模块导入,,最前面加个r,就不用怕转义了2.模块使用re.findall使用结果是数组方式呈现re.finditer把结果变成迭代器,从迭代器类中间取数re.searchre.search 只能匹配到第一个识别到的内容re.match3.推荐写法先预加载完…

        python-range函数

        文章目录基本用法重要特性与列表转换注意事项遍历回去列表的元素索引range()是Python中用于生成数字序列的内置函数,常用于循环和序列生成。基本用法 range(stop) # 生成0到stop-1的整数序列 range(start, stop) # 生成start到stop-1的整数序列 r…

        汽车功能安全-软件集成和验证(Software Integration Verification)【目的、验证输入、集成验证要求】9

        文章目录1 目的2 验证输入3 软件集成要求3.1 要求和建议3.2 汽车行业示例(混合动力控制器软件)4 验证要求1 目的 软件集成和验证阶段的核心目标是证明集成后的软件单元(模块、组件)已经正确地开发出来,满足了所有的功…

        每天一个前端小知识 Day 27 - WebGL / WebGPU 数据可视化引擎设计与实践

        WebGL / WebGPU 数据可视化引擎设计与实践🎯 一、为什么前端需要 WebGL / WebGPU? 传统的图表库如 ECharts、Highcharts 基于 Canvas 或 SVG,适合 2D 渲染,但: 当数据量 > 1 万时,SVG 性能瓶颈明显&…

        JavaScript代码段注入:动态抓取DOM元素的原理与实践

        1.F12打开网页说明:以百度网站为例。通过插入代码块抓取当前网页dom元素。2.新代码段说明:点击源代码/来源菜单项下面的代码段。点击新代码段新增代码段。下面以脚本代码段#6为例。3.编写代码块说明:编写javascript代码,点击下面的…

        Spring Easy

        Spring Easy 用途 通过自动配置,实现了一些国内 Spring Boot 开发时需要在 Spring Boot 框架基础上完成的一些配置工作,可以提升基于 Spring Boot 开发 Web 应用的效率。 安装 使用 Maven 进行包管理,可以从中央仓库安装依赖:…

        【Node.js】文本与 pdf 的相互转换

        pdf 转文本 主要使用 pdf-parse 这个库,直接识别提取我们 pdf 文件中的文字。 const express require("express"); const fs require("fs"); const PDFParser require("pdf-parse"); const cors require("cors");const…

        分布式ID方案

        目录 📊 分布式ID方案核心指标对比 🔍 分方案深度解析 ⚙️ 1. UUID (Universally Unique Identifier) ❄️ 2. Snowflake (Twitter开源) ☘️ 3. 美团Leaf 号段模式 Snowflake模式 🔄 4. 百度UidGenerator 🚀 5. CosId …

        张量类型转换

        一.前言本章节我们来讲解张量的类型转换,掌握张量的转换方法,张量的类型转换也是经常使⽤的⼀种操作,是必须掌握的知识点。在本⼩节,我们主要学习如何将 numpy 数组和 PyTorch Tensor 的转化⽅法.二.张量转换为 numpy 数组使⽤ Te…

        JavaEE-初阶-多线程初阶

        概念第一个多线程程序 可以通过查看jdk路径来找到jdk的控制可以通过jconsole来查看线程。创建线程这是实现多线程的其中一种方法,继承Thread类,实现run方法,之后实例化继承了Thread类的MyThread方法,调用start方法,就会…

        解释全连接层的“参数数量”和“计算过程”,保证像看动画片一样直观~

        假设场景输入图像:一张极小的 灰度图(即 H2,W2,共4个像素),像素值如图所示:隐藏层:假设隐藏层也是 (即 H2,W2,共4个神经元),每个神经元用 ( 表示…