検索
特集

5分で分かる「MVP」アーキテクチャ基礎解説テストに強いソフトウェアアーキテクチャはこれだ!

1980年代初頭に登場したアーキテクチャ「MVC」。MVCには各モジュール間の依存が強く、変更に対する柔軟性が低いという問題点があった。そこで登場したのが「MVP」。MVPはMVCよりも何がイイのか。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 前回「開発者を悩ます『ソフトウェアアーキテクチャ選定』迷った時に使える3つの判断基準」では、MVCアーキテクチャについて説明しました。MVCは「ソースコードの再利用性」という課題を解決したアーキテクチャであり、多くの開発の現場でも活用されています。しかし、MVCアーキテクチャよりもさらに柔軟性を持ったアーキテクチャが生まれました。それがModel、View、Presenterのモジュールから成る「MVP」です。今回は「MVP」の特長とテスタビリティーについて解説します。

著者紹介:石黒 邦宏

デジタル・マジック・ラボでインターネット経路制御運用に関わり、オープンソースウェアで経路制御を実現する「GNU Zebra」を開発。1999年IP Infusionを共同設立し、CTOに就任。2009年Access CTO、2015年アプリックス CTOを経て、2018年デジタルハーツホールディングスCTOに就任。

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

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

MVCとMVPアーキテクチャの構成の違い
MVCとMVPアーキテクチャの構成の違い

 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アプリ開発の現場での採用例が多い

 連載第3回となる次回は、「MVVM」アーキテクチャについて説明します。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る