在分層架構中,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等。
- VO (View Object)
- 定義:用於展示層的物件,通常用於展示特定檢視中的資料。
- 作用:根據展示需求對資料進行加工處理,便於前端展示。
- 示例:UserVO、ProductDetailVO等。
關係總結
- Controller → Service:Controller接收到客戶端請求後,呼叫Service層進行業務邏輯處理。
- Service → Mapper:Service層處理完業務邏輯後,需要透過Mapper層與資料庫互動。
- Mapper ↔ PO:Mapper層使用PO物件與資料庫進行互動,PO物件與資料庫表結構一一對應。
- Service ↔ DTO/VO:Service層可能會使用DTO物件進行資料傳輸,或者使用VO物件向Controller返回展示資料。
- Controller ↔ VO:Controller層接收Service層返回的VO物件,然後將這些資料組織成合適的格式返回給客戶端。
示例說明
假設有一個使用者登入的功能:
- 使用者提交使用者名稱和密碼給Controller。
- Controller呼叫Service層驗證登入資訊。
- Service層呼叫Mapper層查詢資料庫,驗證使用者名稱和密碼是否匹配。
- 如果匹配,則Service層構建一個包含使用者資訊的LoginResponseDTO。
- Controller接收LoginResponseDTO,將其轉換為適合客戶端展示的格式(例如JSON),並返回給客戶端。
以上就是這些概念的基本介紹和它們之間的關係。希望這有助於您更好地理解分層架構中的各個組成部分。
前端向後端傳送請求:
- 前端透過HTTP請求(如POST請求)向後端傳送資料。
-
Controller層接收請求:
- 後端的Controller層接收到前端傳送的請求。
- Controller層負責解析請求中的資料,並將這些資料封裝進一個DTO(Data Transfer Object)中。
-
Controller層呼叫Service層:
- Controller層將封裝好的DTO物件傳遞給Service層。
-
Service層處理業務邏輯:
- Service層負責執行具體的業務邏輯,如驗證資料、計算等。
- Service層可能會進一步將DTO轉換為PO(Persistence Object)物件,以便與資料庫進行互動。
-
Service層呼叫Mapper層:
- Service層呼叫Mapper層(或稱為DAO/Repository層)進行資料的持久化操作。
- Mapper層使用PO物件與資料庫進行互動,執行資料庫操作(如插入、更新等)。
-
Mapper層返回結果給Service層:
- Mapper層完成資料庫操作後,會將結果返回給Service層。
- 如果需要,Mapper層也可以返回一個新的PO物件,該物件可能包含一些新的狀態資訊。
-
Service層處理返回的結果:
- Service層處理Mapper層返回的結果,並根據需要構建一個VO(View Object)或DTO物件,用於返回給Controller層。
-
Service層返回給Controller層:
- Service層將處理後的VO或DTO物件返回給Controller層。
-
Controller層處理返回的資料:
- Controller層接收Service層返回的資料,並將其轉換為適合前端展示的格式(如JSON)。
- Controller層將資料透過HTTP響應返回給前端。
總結起來,整個流程如下:
- 前端 → Controller層
- Controller層 → DTO(封裝前端資料)
- DTO → Service層
- Service層 → PO(用於Mapper層)
- PO → Mapper層(與資料庫互動)
- Mapper層 → PO/VO(結果)
- PO/VO → Service層
- Service層 → VO/DTO(處理後的資料)
- VO/DTO → Controller層
- Controller層 → 前端
請注意,實際應用中可能還會有一些額外的步驟,如異常處理、日誌記錄等,但上述流程是基本的工作流程。希望這能幫助您更好地理解前後端資料互動的過程。