其實分層架構不一定是分成三層,是否再切更多層要視團隊而定。

以我自己的開發經驗來說,開發上主要會分成這三層:

  • Presentation Layer
  • Service Layer
  • Data Acces Layer

展示層 (Presentation Layer)

最接近使用者的一層,在接收使用者的請求後,會請服務層做處理,再將得到的結果展示給使用者。


服務層 (Service Layer)

因為是處理商業邏輯的一層,所以又稱為商業邏輯層。 會請資料存取層處理資料,再把得到的結果交給展示層。


資料存取層 (Data Acces Layer)

資料存取層的物件 (Data Access Object,簡稱 Dao) 是 Service 層用於取得資料的窗口,通常包含與資料庫連線、對資料來源操作 CRUD、OR-Mapping 等內部細節實作,並將取得的資料以 Domain Object 的形式提供給 Service 層調用。 而因為會把資料存至資料庫或檔案,進行長期保存,資料存取層又稱為持久層 (Persistence Layer)。


各層傳遞的資料物件:

  • Domain Object 是用於表示 DB Table 內單筆資料的資料物件

  • DTO (Data Transfer Object) 是服務層和展示層之間溝通用的資料物件。

1
2
DTO 規劃小技巧:
如果 Input (傳入服務層) 和 Output (傳到展示層) 用到的 DTO 欄位不重複時,使用 DTO 時應該就不會每次都把欄位填滿,這時可以分成兩個 DTO 來操作,如果能規劃成拿了這個 DTO 就是要把所有的欄位都填滿的情境,這樣在使用 DTO 的時候,比較不用去記哪些欄位這次要用到,哪些欄位則不用。

通常一個 DTO 會對應至少一個 Domain Object,並在服務層操作 Domain Object 和 DTO 物件的資料交換。


文章作者: Michael

上次更新: 2023-12-01

授權條款: 保留所有權利