本記事の目的
MVCモデルの適切な使いかたについてまとめ、「拡張性が高く、使い回しの効くコードを作成をする」ためにはどのようにモデルを設定すべきか考える。
3層アーキテクチャ
Modelは3層アーキテクチャにおけるドメイン層、データ層を担い、ViewとControllerは3層アーキテクチャにおけるプレゼンテーション層を担う。
View
3層アーキテクチャにおけるプレゼンテーション層を担う。
ユーザの操作に伴うシグナルの発火
ボタンが押される、テキストボックスに文字が入力されるなどユーザの操作を把握する必要がある場合に設定する。
表示の変化
カラーピッカーや異常値が入力された際のエラー表示などの事前に設定された情報のみで管理可能な処理を設定する。
コールバック
クリック時に行われる操作をclickCallback()にまとめる
senderを用いてシグナルを発火したオブジェクトを辿ることで、少ないコード量で別々の処理を行わせることができる。
UIライブラリへの依存
ユーザー側の要求によってWeb、スマートフォン向け、Windows向け、Unix向けのように変化し、言語もPython、Go、Javaのように変化する
UI表示はこの要求による影響を最も受けることから汎用的に使いまわすことは難しい。
入力と出力
入力はユーザの操作、出力は表示の変化
ユーザーの操作はControllerモデルに送信される。
その後Controllerモデルからの出力を受取り、そのまま出力される。
まとめ
ユーザが操作するUIであり、その入力に基づいた表示を行う。
汎用性を高くする需要は低く、寧ろユーザーごとに適切な実装をすることが求められる。
入力はControllerモデルに送信し、Controllerモデルの出力をもとに表示を変更する。
Controller
3層アーキテクチャにおけるプレゼンテーション層を担う。
Viewで受けた入力をもとに必要な処理を持つModelを設定する
処理の順番、入力以外に必要な情報の要求などを行う。
処理も記述するが、Viewの表示のために必要な処理のみを記述し、Viewが不必要になった際にControllerも削除可能な状態にする。
入力と出力
入力はユーザーの操作によって得られたデータ、出力はViewの求めるデータ形式に沿ったデータ
ユーザの操作によって得られたデータをもとに多様なModelを用いて処理する。
その後Modelによって処理されたデータをViewの求める形に変更し渡される。
まとめ
Viewの求める内容の処理の要求とそのために必要な情報の要求を行う。
Viewの内容の変化、Modelの内容の変化に対応しやすいことが大きな魅力。
入力内容をModelを用いて処理し、Viewの求める形にして出力する。
Model
3層アーキテクチャにおけるドメイン層、データ層を担う
ビジネスロジックや抽象化された処理を設定する。
ファイルの作成や出力、データ操作、データ通信などを行う。
一つの入力に対して複数の出力内容に変化させることができるように実装することで拡張性を上げることができる
入力と出力
Controllerから送られるデータをもとに実際の処理を行い、処理の結果を元のControllerへ渡す
入力と出力はControllerの内容によって多彩に変化する。
まとめ
最も汎用性を高くなるように実装し、使い回しを効かせる必要がある。
全体のまとめ
MVCモデルにおけるViewとControllerが3層アーキテクチャにおけるプレゼンテーション層であり、Model層が3層アーキテクチャにおけるドメイン層、データ層を担うことからMとVCに分けて考察を行った。
大規模な開発ではMVCを分ける必要があるが、小規模な開発の場合はViewとControllerはまとめて実装しても良いが、Modelは分けて実装したほうが効率が良いように感じた。