#はじめに
今回は、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の要点をまとめました。
設計難しい、、、