VIPERアーキテクチャパターン

システム開発

VIPERアーキテクチャパターンは、iOSアプリ開発において使われることが多いパターンです。View、Interactor、Presenter、Entity、Routingの5つの要素から構成されています。

View

  • ユーザーインターフェイスを表示する役割を持ちます
  • Presenterとの入出力を行います
  • UIロジックのみを含みます

Interactor

  • ビジネスロジックを実装する部分です
  • Entityを操作し、必要なデータを準備します
  • Presenterの指示に従ってビジネスロジックを実行します

Presenter

  • ViewとInteractorを調整する役割を持ちます
  • Viewからのユーザー入力をInteractorに伝え、Interactorからのデータを加工してViewに渡します

Entity

  • アプリケーションのデータモデルを表現する部分です
  • データベースやAPIからのデータを保持します

Routing

  • 画面遷移のロジックを担当します
  • どのViewを表示するかをプレゼンターに指示します

具体例としてメモ帳アプリを考えてみましょう。

View

  • MemoListView: メモの一覧を表示するView
  • MemoDetailView: メモの詳細を表示/編集するView

Interactor

  • MemoListInteractor: メモ一覧の取得、追加、削除のロジックを実装
  • MemoDetailInteractor: メモの詳細取得、更新のロジックを実装

Presenter

  • MemoListPresenter: MemoListViewとMemoListInteractorの仲介役
  • MemoDetailPresenter: MemoDetailViewとMemoDetailInteractorの仲介役

Entity

  • Memo: メモのタイトル、本文、作成日時などのデータを保持

Routing

  • MemoRouter: 一覧画面から詳細画面への遷移ロジックを実装

例えば、ユーザーがMemoListViewでメモを選択すると、MemoListViewはMemoListPresenterにその旨を伝えます。MemoListPresenterはMemoListInteractorにメモの詳細取得を指示し、取得したデータをMemoDetailPresenterに渡します。MemoDetailPresenterはそのデータを加工し、MemoDetailViewに渡して表示させます。この時、MemoRouterを経由してMemoDetailViewへ遷移します。

このようにVIPERパターンでは、責務をモジュール単位で分離することで疎結合を実現し、個々のモジュールの結合度を下げることができます。ただし、パターンが複雑で多くのクラスが生まれるため、小規模アプリで使うと開発コストがかかる可能性があります。

タイトルとURLをコピーしました