6
0

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 1 year has passed since last update.

ModelViewController

Last updated at Posted at 2022-12-14

14.ModelViewController.png

ここまではビジネスロジックのモデルの中身に関するパターンでしたが、ここからはその外側のコントロールに着目するパターンです。まずは「Webプレゼンテーションパターン」が説明されています。

Model View Controller は、今となっては名前を紹介するまでもないぐらい有名な、いわゆる MVC です。Web 開発者で MVC を聞いたこともない人はまずいないでしょう。

が、MVC が Web 以前から存在することを意識してして言及している人はまれです。この用語が誕生したのは 1979 年のことです。コンピューターがようやくグラフィカルなユーザーインターフェースを一般的に備えるようになりだして間もなくの頃に、もう一般的な指針として言われているのです。

モデルはビジネスロジックなど、ゲームプログラミングで例えて言えば、ゲームのルールです。ビューはモデルの視覚化です。ゲームソフトは、計算モデルを画面に表示しなければ、人が遊べるものになりません。いくらゲームのルールが単純でも、視覚化がたいへんなのはよくあります。コントロールは、ユーザーの操作を含んだモデルとビューの連携制御です。

MVC においてもっとも重要なのは、モデルとビューの分離です。モデルとビューはともに重要ですが、依存関係の上位は必ずモデルです。プログラミングで言う依存関係以外に、セマンティックな依存もすべて含んで、モデルはビューから独立でなければなりません。HTML 表示するためのスタイル情報が欲しいからと、モデル領域にコードを書き足すのは MVC の鉄則を破ることになります。

モデルを固定してビューを交換するのは可能ですが、ビューを固定してモデルを交換するのは不可能です。Web ページのスマートフォンアプリ版は作れても、同じ Web ページを流用して会計システムを在庫システムにすることはできません。より安定していて抽象度が高いものを依存関係の上位に置くのは、モジュール設計の原則です。もしモデルに HTML 表示のためだけの属性を入れてしまったら、スマートフォンアプリに移行したとき、その属性が不要になるだけでなく、同じ考え方をしているかぎり、ビュー用のプラットフォームごとにモデルに追加変更が必要になってきます。

PoEAA が書かれた当時、Web の UI はリクエストごとに、決まった HTML ページを出力するしかありませんでした。どうしても作りが間接的になります。モデルはサーバーサイドにしかなく、ビューはクライアントサイドに出し切ってしまい、その間にはとても遅いインターネットがありました。現在の Web はフロントエンド技術が発達し、当時とは説明が食い違う点が多々あります。

現在では、Web の古い MVC の印象が強すぎるのを気にして、わざわざ MVVM などの新語が生み出されました。MVVM は明らかに、Web UI 以前の MVC と同じものです。ビューそのものをマウスで操作できるのが一般化すると、操作と表示が分かれていた頃と違って、ビューコンポーネントがコントローラーの役目を兼ねるのが自然になってきます。かつての MVC は、ビューはモデルの操作を持つもの、また、モデルの変化はオブザーバーによって暗黙的にビューに反映されるものになりました。現在この MVC は、ブラウザの中で JavaScript によって実現されています。

時代が違いすぎるという側面はあるものの、PoEAA に書かれたプレゼンテーションパターンは、古い Web MVC だけでなく、新しい時代のヒントとしても有用です。なぜなら、パターンの発見に携わった人たちはみな、2002 年の Web 以前からプログラミングをしていたベテランだからです。

6
0
1

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
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?