Java中各程式碼層級的關係

熬夜通宵發表於2024-08-23

在分層架構中,Service​、Controller​、Mapper​(有時也稱為DAO​或Repository​)、PO​(Persistence Object)、DTO​(Data Transfer Object)、VO​(View Object)等概念扮演著不同的角色。下面詳細介紹它們之間的關係及其用途:

1. Service 層

  • 職責:實現業務邏輯,包括計算、驗證、事務處理等。
  • 作用:作為業務處理的核心層,它不直接與UI互動,也不直接訪問資料庫,而是透過呼叫Mapper層來運算元據。
  • 示例:使用者登入認證、訂單建立等業務邏輯處理。

2. Controller 層

  • 職責:接收客戶端請求,呼叫Service層處理後返回響應。
  • 作用:作為應用程式的入口點,負責控制流程並處理HTTP請求和響應。
  • 示例:處理HTTP GET/POST請求,呼叫Service層進行處理,然後將結果返回給客戶端。

3. Mapper (DAO/Repository) 層

  • 職責:負責資料持久化操作,即與資料庫的互動。
  • 作用:實現資料的增刪改查等操作,提供給Service層使用。
  • 示例:插入一條新記錄到資料庫、查詢一條記錄等。

4. PO (Persistence Object)

  • 定義:用於表示持久層物件,通常是與資料庫表結構對應的實體類。
  • 作用:封裝了與資料庫表列相對應的屬性,主要用於Mapper層與資料庫互動時使用。
  • 示例:UserPO、OrderPO等。

5. DTO (Data Transfer Object)

  • 定義:用於系統間傳輸資料的物件,通常用於遠端服務呼叫或不同元件之間傳輸資料。
  • 作用:簡化資料傳輸過程,避免直接暴露內部資料結構。
  • 示例:LoginResponseDTO、OrderSummaryDTO等。
  1. VO (View Object)
  • 定義:用於展示層的物件,通常用於展示特定檢視中的資料。
  • 作用:根據展示需求對資料進行加工處理,便於前端展示。
  • 示例:UserVO、ProductDetailVO等。

關係總結

  1. Controller → Service:Controller接收到客戶端請求後,呼叫Service層進行業務邏輯處理。
  2. Service → Mapper:Service層處理完業務邏輯後,需要透過Mapper層與資料庫互動。
  3. Mapper ↔ PO:Mapper層使用PO物件與資料庫進行互動,PO物件與資料庫表結構一一對應。
  4. Service ↔ DTO/VO:Service層可能會使用DTO物件進行資料傳輸,或者使用VO物件向Controller返回展示資料。
  5. Controller ↔ VO:Controller層接收Service層返回的VO物件,然後將這些資料組織成合適的格式返回給客戶端。

示例說明

假設有一個使用者登入的功能:

  1. 使用者提交使用者名稱和密碼給Controller。
  2. Controller呼叫Service層驗證登入資訊。
  3. Service層呼叫Mapper層查詢資料庫,驗證使用者名稱和密碼是否匹配。
  4. 如果匹配,則Service層構建一個包含使用者資訊的LoginResponseDTO。
  5. Controller接收LoginResponseDTO,將其轉換為適合客戶端展示的格式(例如JSON),並返回給客戶端。

以上就是這些概念的基本介紹和它們之間的關係。希望這有助於您更好地理解分層架構中的各個組成部分。

前端向後端傳送請求

  • 前端透過HTTP請求(如POST請求)向後端傳送資料。
  1. Controller層接收請求

    • 後端的Controller層接收到前端傳送的請求。
    • Controller層負責解析請求中的資料,並將這些資料封裝進一個DTO(Data Transfer Object)中。
  2. Controller層呼叫Service層

    • Controller層將封裝好的DTO物件傳遞給Service層。
  3. Service層處理業務邏輯

    • Service層負責執行具體的業務邏輯,如驗證資料、計算等。
    • Service層可能會進一步將DTO轉換為PO(Persistence Object)物件,以便與資料庫進行互動。
  4. Service層呼叫Mapper層

    • Service層呼叫Mapper層(或稱為DAO/Repository層)進行資料的持久化操作。
    • Mapper層使用PO物件與資料庫進行互動,執行資料庫操作(如插入、更新等)。
  5. Mapper層返回結果給Service層

    • Mapper層完成資料庫操作後,會將結果返回給Service層。
    • 如果需要,Mapper層也可以返回一個新的PO物件,該物件可能包含一些新的狀態資訊。
  6. Service層處理返回的結果

    • Service層處理Mapper層返回的結果,並根據需要構建一個VO(View Object)或DTO物件,用於返回給Controller層。
  7. Service層返回給Controller層

    • Service層將處理後的VO或DTO物件返回給Controller層。
  8. Controller層處理返回的資料

    • Controller層接收Service層返回的資料,並將其轉換為適合前端展示的格式(如JSON)。
    • Controller層將資料透過HTTP響應返回給前端。

總結起來,整個流程如下:

  1. 前端 → Controller層
  2. Controller層 → DTO(封裝前端資料)
  3. DTO → Service層
  4. Service層 → PO(用於Mapper層)
  5. PO → Mapper層(與資料庫互動)
  6. Mapper層 → PO/VO(結果)
  7. PO/VO → Service層
  8. Service層 → VO/DTO(處理後的資料)
  9. VO/DTO → Controller層
  10. Controller層 → 前端

請注意,實際應用中可能還會有一些額外的步驟,如異常處理、日誌記錄等,但上述流程是基本的工作流程。希望這能幫助您更好地理解前後端資料互動的過程。

相關文章