28
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

僕が心の中でやっているMV*パターン分類方法

Last updated at Posted at 2015-06-24

クライアントサイドの設計パターンには、MVCの派生の MVP 、MVVM の名前をよく聞きますね。

いろいろな実装が、どのパターンにあたるか分類することは、意外と微妙で、明確にすることにはあまり意味がなく不毛という話も聞きます。たしかに、々なGUIプログラミング環境を見ていくと、実装上の制限や事情の違いがあり、比較するのは無理があるかもしれません。

個人的な考えでは、MV* な設計パターンは、とくに難しい話ではないと思います。元々は.NET方面で MVC → MVP → MVVM の順に時系列に進化したものだったと思いますが、意外と他の環境でも同じ言葉を当てはめて有用だったからややこしいのかなと思います。

それぞれ、中心とする要素が違っているので、それに注目していくと意義とかが見えてきます。

MVC

MVCの中心は Model。Model を直接、Viewが監視する。

古典的なMVC は、View が Model の 直接のオブザーバになります。Controller は入力を受けつけるのが役割です。つまり、Controller のコントロールの主語は ユーザなんですね。ユーザ視点での、アプリケーション全体のインターフェイスみたいな意味合いというわけです。テレビとかエアコンでいうところのリモコン

現在では、狭義の意味でのMVCはほぼ見られないと思います。

MVP

MVPの中心は Presenter。 MとVの間をとりもつ。

Modelが変更されたら自動でViewが変更されるというのは理屈はきれいですが、現実にはViewはたくさんのパーツの集まりだし、ViewとModelのバインディングが複雑だったり、そもそもドメインロジックに非同期処理などが絡んでくると、Modelの変更タイミングとViewの変更タイミングの制御が煩雑になったりりします。

そこで、ModelとViewの間に立つ人を立てたのがMVPです。P はPresenterで、間に立つ人です。
割とふつうです。iOS には 標準でViewControllerというものがありますが、あれはほとんどPresenterだと思います。

MVVM

MVVMの中心は ViewModel です。

ViewModel は、UIの状態をすべて表現できる構造体です。これを操作することが、MVVMでアプリケーションを書く作業の心臓部です。

なんでそんな構造体を間に介して冗長にならないかというと、データバインディングが前提になっているからです。

MVVMは、データがViewでどう表現されるか宣言的に記述できる方法がないと普通はそう呼ばれません。
だから、js界隈とかで、独自HTMLテンプレにDSLを埋める=MVVM とか呼ばれたりしています。
リアクティブプログラミングとかの仕組みも、宣言的にバインディングが書けるのでMVVMみたいな設計にしやすいです。

そんなかんじです。

28
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?