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
        英文地址,請注明出處:http://en.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個神經元),每個神經元用 ( 表示…