規模のあるソフトウェアの設計をする際に、システムを独立したいくつかのサブシステムに分割してあげることは、多くの利点を生みます。
どのようにシステムを分割するかは設計者のセンスが問われるところだったりしますが、一般的なモデルとして、MVC(Model View Controller)があります。
人とインタラクションするソフトウェアは多くありますが、MVCはこれらに適応可能なモデルで、近年のWeb技術においても多用されているモデルになります。
人間とコンピュータをつなぐ
コンピュータ言語が洗練されてきたとはいえ、我々人間が考えることと、コンピュータが考え処理するデジタルなModelの間には隔たりがあります。
コンピュータが扱いたいModelを如何に人間が見て操作することができるレベルに落とし込むかが課題となります。MVLはこの課題へのソリューションとして考えられたものです。
Modelとは
Modelは主にはデータのことです。データをどのように定義し、どのように格納するのかデータモデルを規定します。
データモデルをどのように定義するかで、今後バグだらけのソフトウェアができあがるか大きなトラブルなく開発できるかが決まってきたりもします。
以前はデータ程度でしたが、最近ではデータモデルをハンドリングするメソッドを含めたり、データモデルを抽象化したAPIを定義してそこまでをModelとすることもあります。
Viewとは
ViewはModelをどのように見せるかを担います。Controllerから指示されて表示するだけでなく、Modelからデータをとってきて、表示を更新する役割もあります。
Modelは一度作ると変えることが難しいですが、Viewは作り変えることは技術的には難しくありません。またバリエーションも複数持ったりといったことも可能です。
Controllerとは
Controllerはユーザーとシステムの橋渡しを行うものです。UNIXのコマンドラインのようなものであれば、コマンドを実行するところがControllerで、その出力がViewです。
引数に何か指定するのであればそれはControllerの範疇ですが、コマンド実行中にユーザーに入力を要求するのであればViewの範疇となります。
このようにControllerとViewは区別されますが、実装的には一つにまとめられる傾向があります。
Controllerの役割は大きなものになってしまいがちです。そこでModelを抽象化したりして、役割を移譲することでControllerをよりシンプルに実装できるようにすることが一般的です。
まとめ
ソフトウェアを設計する上で、MVCをモデルにしてサブシステム分割することが一般的によく行われています。
MVCは古くからあるモデルですが、Webアプリケーションとも相性が良いことから、最近でも良く利用されます。
Model、View、Controllerにはそれぞれに役割がありますが、3つのバランスを考慮して機能配分を行う必要があります。
コメント