經典永不嫌多,今天來聽皇后合唱團的 I Want To Break Free
昨天提到,在一個典型的三層式架構中,Service 層通常位於 Controller 層和 Repository 層間,負責協調不同類型的業務邏輯、保證數據的正確轉換與處理,確保資料在各層之間的一致性和安全性。今天要接續探討如何設計和實現一個穩固的 Service 層結構,並且瞭解其中的一些核心概念,如 DTOs、Entities、VO 和 POJO。
在構建 Service 層時,保持結構清晰合理是很重要的一件事,可以充分利用 介面
來確保程式碼的解耦和可測試性。一般來說,每一個業務邏輯單元都應該有一個單獨的 Service 介面和其實現類 impl
,並且依賴於 介面
而非具體的實現。
Data Transfer Object (DTO)
定義: DTO是一個用於資料傳輸的物件,包含多個屬性,並且經常用於 Service 層和 UI 層間的資料傳輸、或跨網絡傳輸。
用途: 在 Service 層與 Controller 層之間使用 DTOs,可以確保資料的封裝和傳輸效率。DTOs 可以用來調整和優化從資料庫獲取的數據,僅僅包含所需的內容、減少不必要的資料傳輸,在需要優化性能、減少網絡傳輸次數或資料量的時候很需要。舉例來說,當需要將用戶資料從 Service 層傳遞到 Controller 層時,可以創建一個 UserDto
,僅包含 user name, email 和其他 UI 層所需的資訊,而不包含機密資料例如密碼。
Entity
定義: Entity 是與資料庫 table 一一對應的 Java 物件,通常帶有一些標識性的訊息(如ID)。
用途: 在 ORM 框架中 Entity 用於將物件 mapping 到資料庫中的一個表。
Value Object (VO)
定義: VO 是一個不包含業務標識(比如ID)的物件,透過它的屬性值來確定是否相同,而不是通過某個ID或指標。
用途: VO通常用於傳遞資料,尤其當資料需要包裝並且該資料不需要持久化到資料庫時。
POJO(Plain Old Java Object)
定義:POJO 是一個普通的 Java 物件,不繼承或實現特定的框架相關的 類
或 介面
,且沒有遵從某個特定的架構模型的規範和方法。
用途:通常被用作數據的載體,也可以包含一些業務邏輯。POJO 的目的是簡化物件的創建和使用,避免讓物件變得過於複雜或依賴於特定的企業解決方案。
在Spring Boot項目中,Entities, DTOs, 和 VOs 通常都是以 POJO 的形式存在的。舉個例子:
public class UserEntity { private String username; private String password; // getters and setters }
上述 UserEntity 就是一個典型的 POJO ,沒有任何框架的依賴,僅是一個簡單的 Java class。