iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0

經典永不嫌多,今天來聽皇后合唱團的 I Want To Break Free

Yes

昨天提到,在一個典型的三層式架構中,Service 層通常位於 Controller 層和 Repository 層間,負責協調不同類型的業務邏輯、保證數據的正確轉換與處理,確保資料在各層之間的一致性和安全性。今天要接續探討如何設計和實現一個穩固的 Service 層結構,並且瞭解其中的一些核心概念,如 DTOs、Entities、VO 和 POJO。

如何組織 Service 層

在構建 Service 層時,保持結構清晰合理是很重要的一件事,可以充分利用 介面 來確保程式碼的解耦和可測試性。一般來說,每一個業務邏輯單元都應該有一個單獨的 Service 介面和其實現類 impl,並且依賴於 介面 而非具體的實現。

DTOs, Entities, VO 和 POJO 定義和用途

  • 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。


上一篇
Day 22 - Service Layer
下一篇
Day 24 - Service Layer (3)
系列文
Spring Boot 三十天挑戰賽30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言