天天看點

軟體架構之程式架構設計

作者:蝸牛架構食

軟體架構之部署架構(幹貨)

軟體架構之資料架構(幹貨)

軟體架構之系統架構(待釋出)

軟體架構之技術架構(待釋出)

架構的介紹(優點)

軟體架構之程式架構設計

程式設計三層架構圖

當應用程式設計按照Controller,Service,Repository的架構組織時,通常被稱為三層架構或分層架構,以下是對該架構的介紹:

  1. 控制器(Controller):控制器負責接收使用者的請求,并根據請求的内容和類型來排程和協調應用程式的其他元件。它處理路由、參數解析、權限驗證等功能。控制器不負責具體的業務邏輯處理,而是将請求傳遞給服務層進行處理。
  2. 服務層(Service):服務層是應用程式的核心業務邏輯層。它包含了應用程式的具體業務功能,負責處理業務規則、資料處理、事務管理等。服務層通過封裝群組織邏輯,提供高層次的接口供控制器調用,并協調不同的資料通路操作。
  3. 資料通路層(Repository):資料通路層處理與資料存儲的互動。它負責封裝對資料存儲(如資料庫、檔案系統、外部API等)的通路操作,提供一組接口供服務層使用。資料通路層隐藏了底層資料存儲的具體實作細節,使服務層能夠更專注于業務邏輯的處理。

這種架構模式的優勢在于明确劃分了不同的職責和關注點,使得代碼更易于了解、維護和測試。控制器負責處理使用者的請求和響應,服務層負責處理業務邏輯,資料通路層負責處理資料存取,各自職責清晰,互相協作。

此外,該架構模式也支援單一職責原則和子產品化設計,使得系統的各個子產品相對獨立,便于團隊協作和可擴充性。同時,它也有助于提高代碼的重用性,因為服務層和資料通路層可以在不同的場景中共享。

架構的缺點

  1. 增加了開發和維護的複雜性:引入多個層級的架構會增加代碼量和系統的複雜性。需要開發和維護額外的元件,并處理它們之間的互動和依賴關系。
  2. 過度的分層和抽象:過度的分層和抽象可能導緻代碼過于複雜,使得了解和調試變得困難。在一些簡單的應用程式中,引入三層架構可能會帶來過度的開銷和複雜性,不利于快速開發和疊代。
  3. 性能和效率問題:在一些情況下,多個層級的調用和資料傳輸可能會引入額外的性能開銷。尤其是在大規模系統或需要高性能的場景下,過多的層級和中間過程可能會降低系統的響應速度和效率。

總體而言優點大于缺點,缺點可以通過其它一些方式改善(如下)!

傳輸資料的對象DTO(Data Transfer Object)

主要解決該架構中多個層級的調用和資料傳輸的複雜度。

在三層架構中,DTO(Data Transfer Object)是用于在不同層級之間傳輸資料的對象。DTO 通常用于将資料從資料通路層(Repository)傳遞到服務層(Service)或從服務層傳遞到控制器層(Controller),以及在不同層級之間進行資料交換。

DTO 的設計目的是在不同層級之間提供一種簡單、輕量級的對象,以避免在網絡傳輸或層級之間的方法調用中傳遞過多的資料。它将資料封裝為一個特定的對象,該對象隻包含必要的屬性和相關的資料。DTO 對象通常是隻讀的(immutable),并且沒有業務邏輯,僅用于資料傳輸。

以下是一個基本的DTO示例代碼,用于表示使用者對象:

type UserDTO struct {
    ID        int64  `json:"id"`
    FirstName string `json:"first_name"`
    LastName  string `json:"last_name"`
    Email     string `json:"email"`
}

// 從層級對象建立UserDTO
func NewUserDTO(user *User) *UserDTO {
    return &UserDTO{
        ID:        user.ID,
        FirstName: user.FirstName,
        LastName:  user.LastName,
        Email:     user.Email,
    }
}

// 将UserDTO轉換為層級對象
func (dto *UserDTO) ToUser() *User {
    return &User{
        ID:        dto.ID,
        FirstName: dto.FirstName,
        LastName:  dto.LastName,
        Email:     dto.Email,
    }
}           

NewUserDTO 函數用于從層級對象 User 建立 UserDTO 對象。ToUser 方法用于将 UserDTO 對象轉換回層級對象 User。

這隻是一個簡單的示例,實際的DTO實作可能會更加複雜,根據你的應用程式需求進行擴充和調整。你可以根據需要添加更多的屬性、方法和自定義邏輯,以滿足你的資料傳輸需求。

繼續閱讀