LoginSignup
8
5

More than 1 year has passed since last update.

【Swift】CleanArchitectureの要点をまとめる

Last updated at Posted at 2021-07-09

はじめに

今回は、CleanArchitectureのそれぞれの要点をまとめていきたいと思います。

概要

クリーンアーキテクチャでは以下の画像がすごく有名ですね。
この画像からわかるように、クリーンアーキテクチャの本質は中心に向かう矢印の方向(依存方向)です。
ScreenShot 2021-07-09 23.14.33.png

例えば、赤色のUseCasesは緑色のGateways(Repository)を具体として知っていてはいけません。

また、この画像の右下の図も重要です。必ずUseCasesを経由して全ての制御を行うべきなので、どうしてもUseCasesから緑の領域に向かいたい場合もあります。そういった時にはインターフェース(iOSでのprotocol)と依存関係逆転の原則を使い回避します。

全体図

以下の例ではMVVMのModelをクリーンアーキテクチャによって細分化しています。

ScreenShot 2021-07-09 23.24.23.png

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の要点をまとめました。
設計難しい、、、

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5