The Clean Architecture II

Uncle Bob 原始圖

App 常用圖

前一篇我們介紹了 Clean Architecture 的主要精神與概念,現在我們來細部看一些層與名詞的定義

  • 第一張圖是 Uncle Bob 的原圖
  • 第二張是 App 常用到的簡化圖

Entities

Entities 是 App 的核心,透過 Entities 你可以了解 App 想做什麼,有什麼功能,有哪些商業邏輯。 注意 Entities 定義了規則,但不去實作規則,也不會去驗證規則,也不儲存資料,更不會去跟外層互動。 比如你發想了一個電子書 App,書櫃書籍,書籍分類,書籍資訊等等都是 Entities

我認為 Entites 翻譯成 單元好像比較貼切

Use Cases

也稱之為 interactors or business services,是 Entities 的擴展,整合所有的單元。它跟我們實務分析上的 Use Case 是同樣的精神概念,比如把這本書從我的最愛移除 removeFromFavoriteUseCase,或者把這本書的分類從財經改到工具書 changeCategoryFromFinancialToToolsUseCase等等。

Repositories

顧名思義,Repositories 提供 Entities 的持久化 (Persistence),通常會提供 CRUD 的介面,或者一些比較有目的性的高階 API,比如跟帳號有關的可以叫做 AccoutnRepository 等等。

Presenters

在我的理解上不論你導入的是 MVC, MVP, MVVM,Presenters 扮演的角色有點像是 Controller or Selector,比如在 View 中有方法叫做 onBorrowButtonClickedonEntranceListItemSelected,那對應 Presenter 的方法可以叫做 borrowBookselectEntrance

DB & API

通常我們會選擇一些 Database framework 來做整合,常用的比如 realm, sqlite, core data……等等。

Device

諸如一些感應器,鬧鐘,推播,播放器等等,主要也是實作內層定義的抽象 output。

Reference