「MVP」アーキテクチャとは?

インターネットが普及したことで、ソフトウェアベンダーは簡単にアップデートプログラムを提供できるようになり、その一方で開発側はソースコードを頻繁に修正、変更する必要性が出てきました。そこで「ソースコードの変更耐性」という新たな課題が生まれました。これを解決するアーキテクチャとして生まれたのが「MVP」(Model/View/Presenter)です。「MVP」は異なる複数のViewを同時にサポートするために生み出されたもので、Viewとの独立性が非常に高いアーキテクチャです。

MVCアーキテクチャはModelにデータ変更が加わった場合、直接Viewに通知し変更を加えますが、MVPではPresenterが変更通知をとりまとめViewに通知するというものです。MVCはModelとViewがつながっていますが、MVPはPresenterを介する形となるためModelとViewは完全に分離されています。これは、ModelとViewが直接つながらずControllerを介して変更が通知されるMVCの発展形である「MVC2」に近いアーキテクチャです。
MVPアーキテクチャの大きな特長は、ビジネスロジックに関連する機能をPresenterに集約することで、Modelの簡素化とViewの独立性を実現したことにあります。
こうしてModelとViewの独立性が高まることによって、各モジュールの変更が他のモジュールに及ぼす影響を最小限にでき、その結果として「変更に強いアーキテクチャ」を実現しました。また、MVPは、多くのアプリ開発の現場で活用されており、ベストプラクティスが集まっている点もメリットです。

また、以上のようなメリットに加えてGoogleがMVPベースのサンプルアプリを多く提供し、「Android Support Library」も充実しており、簡単にAndroidのアプリ開発を始められるため、モバイル開発の現場では、Androidアプリの開発にMVPを採用する実例が多いようです。Androidアプリ開発では、MVPは候補に挙げておくべきアーキテクチャだと思います。

「テスタビリティー」から考えるMVPアーキテクチャ

MVPをテスタビリティーの観点から考えると、MVCでModelに含まれていたビジネスロジックに関わる機能をPresenter側に集約したことで、Modelを単体でテストしやすくなり、さらに、Viewの独立性が高いアーキテクチャのため、Viewの単体テストもしやすくなりました。

その半面、Presenterにビジネスロジックが集中するため、いかにPresenterの機能を細かく分離してテストをしやすいように実装できるかが、大きなポイントだと考えられます。また、View/Presenter/Modelが1セットとして実装されることが多いため、規模が大きなソフトウェアやアプリケーションの場合、この組み合わせの数が膨大になりがちです。この問題については、次回以降で説明したいと思います。以上のポイントを踏まえ、MVPの特長をまとめると以下になります。

MVPの特長まとめ

  • 「変更に強い」アーキテクチャである
  • 3つの基準「コード量」「変更への耐性」「テストのしやすさ」全てが平均的なバランス
  • モバイルアプリケーション、特にAndroidアプリ開発の現場での採用例が多い

SHARE

  • facebook
  • twitter

SQRIPTER

Sqripts編集部

記事一覧

Sqripts編集部がお役立ち情報を発信しています。

Sqriptsはシステム開発における品質(Quality)を中心に、エンジニアが”理解しやすい”Scriptに変換して情報発信するメディアです

  • 新規登録/ログイン
  • 株式会社AGEST