いまさら聞けないMVCの話
MVC。
プログラム開発をしている人にとって、MVCモデルというのを耳に挟んだことはあるかと思います。
ですが実際MVCモデルで開発せよ。と言われるといささか躊躇(ちゅうちょ)するのではないでしょうか。
これまでいくつかのシステム開発の現場を渡って、その中で教えてもらいましたが、一方MVCの利点を潰すようなプログラムを見ると、先々の苦労を予想しながら、その現場を離れるときに、「頑張れよ」とつぶやいたりします。
例えば Struts2 のようなMVCフレームワークというものがあります。
ですがこのMVCフレームワークを使えばMVCの開発が出来ている訳ではありません。
MVCフレームワークはMVCでの実装がしやすい環境を提供するだけで、ルールを無視して実装していては、作った人にだけしかわからない独りよがりのプログラムとなります。
ではMVCについて少し掘り下げてみましょう。
MVCはModel、View、Controller の頭文字を並べたものです。ここまでは耳の聡い開発者であれば知っていると思いますが、MVCとはプログラムをこのModel、View、Controllerに役割を分割して開発する手法です。
それではModel、View、Controllerとはそれぞれどういうことなのでしょう。
View
比較的わかりやすいViewの話から始めます。
Viewは出力画面のデザインです。厳密には少しニュアンスが違いますが、まずは出力画面のことと思ってください。
WEBアプリの場合、HTMLの中にアプリ中で取得したデータをどの様に埋め込むかをプログラミングされています。
MVCでない時、HTMLはプログラム中のprint文で書かれていることよくありました。ちょっとしたデザインの変更でもプログラムの中から変更箇所を探し出し、他に影響がないように変更し、デグレードが起きていないかも含めてテストするということで、とても苦労しました。
プログラムの中から静的なデザインと動的なデータを埋め込む処理を抜き取ったのがViewという部分です。
Model
Modelというのはデータの塊のことを指します。全画面のデータの塊、データベースに保存するデータの塊、データベースから取得したデータの塊、次画面に表示するデータの塊。
それぞれの塊を1ファイルにまとめたものがModelです。
オブジェクト指向の話でも触れたいと思いますが、塊でデータを扱うことによって、処理中で煩雑になることを防ぐことになります。
Controller
MVCで一番悩ませているのが、このControllerではありませんか?
MVCフレームワークのActionファイル、ControllerファイルがControllerに当たるというところまでは想像できると思いますが、Actionファイル、ControllerファイルがあればMVCである訳ではありません。
Controllerはコントロールするということです。コントロールするは他動詞なので、目的語が必要です。つまり何かをコントロールします。何を?Modelをコントロールします。
ではModelをコントロールするってどういうことなのでしょう。
Controllerの基本的な動きを見てみましょう。
1.Controllerは実行するとまず前画面のModelを受け取ります。
2.受け取ったModelをそのままビジネスロジックへ渡します。
3.ビジネスロジック内で前画面のModelから次画面のModelを作成して、Controllerに渡します。
4.Controllerはビジネスロジックから次画面のModelを受け取ります。
5.受け取った次画面のModelをViewに渡して表示します。
つまりModelのキャッチアンドリリースがControllerの役目なのです。
Controller内でModelのデータを参照することは基本ありません。
なぜMVCと三権分立させるのか
わたしの経験上MVCはアプリの新規作成時に威力を発揮することはまずありません。MVCはすでに完成したシステムを改修するときにその力を発揮します。
例えば少しデザインの静的な部分を変更したいとしましょう。
その時はViewに当たるファイルだけを変更します。
また表示する項目を増やしたいという要望があったとします。
その時はModelとたぶんViewのファイルを変更することになるでしょう。
上の二つの改修の時、Controllerは基本触ることはいたしません。Modelの改修でControllerに影響がないように、ControllerでModelの変数を参照することは控えるべきです。
またビジネスロジックを増やしたい必要があったとします。
Controllerに新しいビジネスロジックを呼び出すようにします。
内容にもよりますが、ModelやViewに影響はありません。
この様に改修する対象によって、変更するファイルは特定されます。これで変更箇所の捜索や改修後のテストがとても容易になって、結果改修コストが抑えられるようになるということです。
ということで、MVCはプログラムをModel、View、Controllerの三つの役割に分割することですよ。そしてControllerはModelをコントロールすることに集中して、Modelの変数を参照してはいけませんよ。というお話でした。
プログラム開発者にとって幸いとなりますように。
この記事が気に入ったらサポートをしてみませんか?