<SaaS Series: Clean Architecture>

Posted on Dec 26, 2022

這個系列是研究 SaaS 實作的技術系列部落格,我們會從設計一路到實作走一遍。

Index

Clean Architecture

說到 SaaS 業界目前的首選絕對是 Uncle Bob 的 Clean Architecture,我主要會參考這個概念當作出發點。

簡單描述一下 Clean Architecture 有什麼樣的特性。

  • Independent of Frameworks: 獨立於框架之外,你可以使用框架,但是不能夠被框架給綁住。
  • Testable: 可以測試,這邊指的是能夠完全獨立測試商業邏輯,就算拔除 UI/Database…等外部元件。
  • Independent of UI/Database/External agency: 簡單來說希望所有抽象的核心邏輯完全脫離外部的元件。

為了達到以上的目標,我們用下圖進行說明。

為了達到獨立性,外圍的程式碼只能依賴內圈的程式碼,當我們修改外部程式碼的時候,內部邏輯不能夠被影響。接著我們介紹一下這些同心圓代表的意義…

Entities

最核心的業務邏輯部分,可以是 object/method/data structures/functions,這是整個系統最穩穩定的部分,我們不會希望業務以外的更動去影響到這層。

Use Cases

這層是介於 Entities 和外圍元件的中間層,這層會依賴 Entities,但是又不會希望更動 Database/UI 會影響到這層。

Interface Adapters

這層是轉換層,我們希望把所有外部的資料結構全部轉換成內部 Use Cases/Entities 看得懂的資料結構。舉例來說,這裡進去你不應該看到任何 SQL 之類的語句,這些全部都會轉換成 Use Cases/Entities。

Frameworks and Drivers

最外圍的部分,基本上我們不會自己寫什麼 code,此處多半是處理細節,避免影響到內部的部分就好。