6
3

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.

はじめに

MVCモデルについて勉強した内容をまとめてみた。

情報処理試験ではよく見かけるワードだが、誰かに説明するとなると難しい。。。

目次

MVCとは
メリット・デメリット
動作イメージ

MVCとは

アプリケーションをModel、View、Controllerという3つの役割に分け、それぞれの分担を明確化させるアーキテクチャ(ソフトウェア構造)

Model→データの処理を担当
View→ユーザーが直接触れる部分。画面への表示や入力した値をcontrollerへ渡す
Controller→ModelとView間でデータの引き渡しや機能の呼び出しを行なう

メリット・デメリット

まずはメリットから。自分が製造を通して感じたメリットは以下の2つ。

①保守性の向上
各々の役割がハッキリしてるので、エラーがあった時の原因を突き止めやすい
例:Modelの抽出結果は正しいのに、画面に表示された値が想定と異なる
→Viewに問題がある可能性が高い

②役割の独立性
Model、View、Controllerはそれぞれ独立しているので、各々を個別に開発することができる

例:顧客に画面イメージを確認してもらうために、Viewのプロトタイプを作成する
  テーブルレイアウトがあるので、Modelの定義を先行して行なう

次にデメリット。

①役割の分割が大変
何をどこに書くのかを設計者・製造者が理解していないと、プログラムの構造が歪になってしまう。そうなると、上記のメリットを享受できなくなる。

なお私が躓いたのは、ControllerとModelの分割。Modelに書くべき処理をControllerに書いてしまい、Controllerの規模が膨れ上がってしまった。

これはFat Controllerと呼ばれるアンチパターンだと後に知った。何をどこに書くべきなのか、メンバーはしっかりと理解すべき。

動作イメージ

次は実際の機能を例にして、Model/View/Controllerがどのような処理をしているのかを見ていく。

検索条件を入力して「検索」ボタンをクリックすると、検索条件に紐づく結果が画面に表示される

というよくある検索画面をイメージして、以下の図を見ていただきたい。
MVC①.jpg

図解のセンスはいったん保留にするとして、手順としては以下の順番で処理が行われている。

手順
1.ユーザーが画面で検索条件を入力し、「検索」ボタンをクリックする
2.Viewは検索条件をControllerへ引き渡す
3.ControllerはModelに定義されたメソッド操作を呼び出す
4.Modelはデータ抽出を実行
5.Modelは抽出結果をControllerへ返す
6.ControllerはViewへ結果の表示命令を出す
7.Viewは検索結果を表示する

大まかな流れとしてはこの認識で問題ない。
この図を見ると、冒頭で説明した

Model→データの処理を担当
View→ユーザーが直接触れる部分。画面への表示や入力した値をcontrollerへ渡す
Controller→ModelとView間でデータの引き渡しや機能の呼び出しを行なう

の役割を理解しやすいと思う。

終わりに

この記事では、MVCの概要について解説した。
初めての投稿ということもあり、お見苦しい点は見受けられると思うが、今後も投稿を継続することで徐々に改善していきたい。

ご指摘等あれば、コメントください。
最後までお読みいただきありがとうございました!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?