MVPアーキテクチャパターンは、Model-View-Presenterの略で、MVVMパターンに似ていますが、役割分担が少し異なります。主に以下の3つの要素から構成されています。
Model
- アプリケーションのデータを表現する部分
- データベースやAPIからデータを取得・保存する責務を持ちます
- ビジネスロジックを含まない素のデータを扱います
View
- ユーザーインターフェイスを表す部分
- UIコンポーネントや画面レイアウトなどを含みます
- Presenterにユーザー操作を通知する役割があります
Presenter
- Viewの入力を処理し、Modelを使ってビジネスロジックを実行します
- Modelのデータを加工して、Viewに表示するデータを提供します
- MVVMのViewModelに相当する役割です
具体例として、タスク管理アプリケーションでMVPパターンを適用した場合を考えてみましょう。
Model
- Task: タスクの詳細情報(タイトル、期限、説明など)を保持するクラス
- TaskRepository: データベースやAPIとのデータのやり取りを行うクラス
View
- TaskListView: タスク一覧を表示するUIの部分
- TaskDetailView: 選択したタスクの詳細を表示するUIの部分
Presenter
- TaskListPresenter: タスク一覧の表示ロジックを担当し、TaskListViewにデータを渡す
- TaskDetailPresenter: タスク詳細の表示ロジックを担当し、TaskDetailViewにデータを渡す
ユーザーがTaskListViewでタスクを選択すると、TaskListViewはTaskListPresenterにその旨を通知します。すると、TaskListPresenterがTaskRepositoryからタスクデータを取得し、必要な情報を加工してTaskDetailPresenterに渡します。TaskDetailPresenterはその情報をTaskDetailViewへ渡して表示させます。
新規タスク作成時は、TaskDetailPresenterが新しいTaskインスタンスを作り、TaskRepositoryに保存を指示します。
このようにMVPパターンでは、Presenterが中心となってViewとModelの仲介役を務め、適切な役割分担を実現しています。ViewはUIロジックのみを担い、Presenterがユーザー操作に対する具体的な処理とビジネスロジックを実装することで、責務の分離とコードの保守性が高まる利点があります。