はじめに
MVPは
Model
View(View,ViewController)
Presenter
の3つで構成されています。MVC
ではView
とViewController
は分けて考えられていましたが、MVP
においてはView
として扱われます。
なぜMVPなのか
MVC
ではViewController
の責務が大きくなってしまうため、テストの容易性や作業分担のしやすさといった問題があります。それを解決するためのアプローチがMVP
です。以下では、MVP
における役割分担をMVC
と交えながら確認していきます。(なお今回はMVP
の中でもPassiveView
パターンを取り扱います。)
MVC
Model
・ビジネスロジックを担当
View
・画面の描画処理
Controller
・View
の入力に対し処理を行う( Controller
はView
に依存 )
・Model
に処理を依頼する( Controller
は Model
に依存 )
・Model
の情報を取得するためにAPI等に問い合わせる( Controller
はUtility
に依存)
以上のようにMVC
においてController
は多くのロジックが詰め込まれているおり、抱える責務が多くなってしまいます。またはController
は、View
、Model
、Utility
に依存している為、作業分担やテストの容易性といった点で問題があります。
MVP
Model
・MVC
と同じくビジネスロジックを担当
View( View, ViewController )
・Presenter
に処理を依頼(protocol
を介して依頼する為、任せる相手は知らない→疎結合)
Presenter
・Model
に処理を依頼(Presenter
は Model
に依存)
・Model
の情報を取得するためにAPI等へ問い合わせる(Controller
は Utility
に依存)
・output
に処理を依頼(protocol
を介して依頼する為、任せる相手は知らない→疎結合)
一方でMVP
におけるController(View)
の役割は、外部からのアクション(CellやButtonのタップなど)をPresenter
に伝えるだけです。一見、Controller
とPresenter
間に依存関係があるように見えますが、Protocol
で関係を持たせているため疎結合の状態です。つまり、依頼を受けたPreseter
も処理を伝える相手が誰であるかは分かりません。このようにプレゼンテーションロジックが切り離されている為、デザイナーさんの作業が押してしまっていても作業を進めることが可能です。
終わりに
以上です。次はMVVMについてまとめようと思います!