はじめに
今回は、CleanArchitectureのそれぞれの要点をまとめていきたいと思います。
概要
クリーンアーキテクチャでは以下の画像がすごく有名ですね。
この画像からわかるように、クリーンアーキテクチャの本質は中心に向かう矢印の方向(依存方向)です。
例えば、赤色のUseCasesは緑色のGateways(Repository)を具体として知っていてはいけません。
また、この画像の右下の図も重要です。必ずUseCasesを経由して全ての制御を行うべきなので、どうしてもUseCasesから緑の領域に向かいたい場合もあります。そういった時にはインターフェース(iOSでのprotocol)と依存関係逆転の原則を使い回避します。
全体図
以下の例ではMVVMのModelをクリーンアーキテクチャによって細分化しています。
Presentation層
Presentation層の大切なところのみまとめます。
ViewModel
・Domain層とのprotocol
・UIイベントをどのように振る舞うかを決める
・ViewControllerを知らない
・UseCaseを実行し、UseCaseから受け取ったデータをViewControllerに渡す
ViewController
・UIイベントをViewModelに任せる
・ViewModelからの通知によってViewの状態を変更する
View
・ViewControllerを知らない
Domain層
Domain層の大切なところのみまとめます。
UseCase
・全ての制御をここを介して行う
・ViewModelからの要求に対応する
・必要に応じてRepositoryへデータを要求
・RepositoryからのデータをViewModelに渡す
・ViewModelやRepositoryを知らない
Repository(protocol)
・インターフェース
・どこに保存されるのかは知らない
Entity
・データの型
Data層
Data層の大切なところのみまとめます。
RepositoryImpl
・Domain層とのprotocolに準拠
・UseCaseからの要求に対し、DataStoreから実際のデータ取得を要求
・DataStoreから受け取ったデータをUseCaseに渡す
・DataStoreを知らない
DataStore
・データの永続化
・DB, API, Realmなどにつき都度用意する
・Factory Patternを用いてRepositoryがDataStoreの種別を意識しないようにする
Entity
・純粋なデータ型(なくても良い)
おわりに
今回は、CleanArchitectureの要点をまとめました。
設計難しい、、、