VIPERとは
View
・Interactor
・Presenter
・Entity
・Router
の略語。
iOSアーキテクチャ。
VIPER 公式サイト(和訳) Qiita@YKEI_mrn
それぞれの役割
項目 | 役割 |
---|---|
View |
画面更新・Presenter へのイベント通知 |
Intractor |
ビジネスロジック・Presenter から依頼されたビジネスロジックを行い結果を返す・API通信 |
Presenter |
View から受け取ったイベントを元に別のクラスに依頼 |
Entity |
struct でデータ構造の定義 |
Router |
画面遷移 |
Viewについて
- 画面更新
Presenter
へのイベント通知
を行う。
UIView
、UIViewController
がView
に該当する。
"見た目"と"ユーザー操作"を受け付け、MVCモデルのVCに当たる。
画面更新
テキストラベルの内容変更や、テーブルビューの再読み込みなど
Presenterへのイベント通知
ライフサイクル(viewDidLoad()
やviewWillAppear())
など)の通知、ボタンのタップやセルのタップの通知
ライフサイクルについてはこちらで紹介しています。 https://zenn.dev/lucas07s/books/pglang-swift/viewer/lifecycle
Interactorについて
を行う。
単一の責任を意識する。
import UIKit
は禁止。 UIがどういう状態かは気にしない。
Presenterについて
View
から受け取ったイベントをもとに別のクラスに依頼(中継役)View
に対して画面更新を依頼Interactor
に対してデータの取得を依頼Router
に対して画面遷移を依頼
を行う。
お客さんからオーダーを聞き、シェフに伝える。 出来上がった料理をお客さんへ提供する。
Presenter
はレストランのウェイター。
Presenter
が提供するメソッド名は、viewDidLoad()
やloginButtonDidPush()
といった命名をする。
import UIKit
は禁止。 UIがどういう状態かは気にしない。
Entityについて
struct
でデータ構造の定義- = データそのもの
- 基本的にプロパティとイニシャライザのみ定義し、ロジックは持たせない
を行う。
Routerについて
- 画面遷移
を行う。
それぞれの関係
VIPER 公式サイトから引用
命名
プロトコル名 | インスタンス名 | |
---|---|---|
View | {Name}View | {Name}ViewController |
Interactor | {Name}Usecase | {Name}Interactor |
Pressenter | {Name}Presentation | {Name}Presenter |
Entity | 不要 | {Name} |
Router | {Name}Wireframe | {Name}Router |