9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

9
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
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?