5
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 5 years have passed since last update.

MVCフレームワークって?

Last updated at Posted at 2018-09-18

すでに一定量以上のコードで組まれたプログラムを読み込むのがつらい。

本当に1行だけ直せば済むような修正であっても、どこをどう直せば間違いなく正しく動いてくれるのか・・・
プログラミング初心者の自分にとっては、砂漠に落ちた指輪を探すような途方の無さがあります。

そんな弱音を吐いていた所、
そもそもさぁ、「MVC」って知ってる?
虚を突かれたような思いがしました。

また、よくわからないアルファベットの組み合わせ・・・。
頭に来たので、調べた内容をいかにまとめます。

  • MVCフレームワークとは

ある程度以上、規模のあるプロジェクトにおいて、

「どんな機能が、どこに格納されているか」

わかりやすくする為の、整理整頓術です。
正確に記述すると、設計思想の一つです。

  • MVCの3要素

MVCの基本機能は、以下の3つから成り立ちます。まずは、教科書通りの正確な定義から。

  • Model・・・一般的にビジネスロジックと呼ばれる機能
      

  • View・・・ユーザーに触れる部分、見た目やレイアウトに関わる機能

  • Controller・・・ModelとViewの仲介役、作業やデータのやりとりの処理を制御する機能

  • レストランでの食事におけるMVC

まず、出だしのModelの説明「ビジネスロジック」からなんのことやらさっぱりわかりません。

以下に様々な記事を読んで、自分なりの解釈をお送りします。

プログラムが実行する処理をレストランで、「料理を作って、お客さんの口に届くまで」の工程で例えてみます。

Model → コックさん
Controller → ホールスタッフ
View → 料理を食べるお客さん

次に具体的な説明で、各要素がどのような働きをしているか詳しく見ていきます。

  • 美味しい食事が届くまで
  1. 料理を注文する(View) →多くの場合、ユーザーが視覚的に触ることのできるViewからプログラムに指示が入って来ます。
  2. 注文をコックに伝える(Controller) →Viewから入って来た指示をControllerが受けて、最も処理機能が得意なModelに伝えます。
  3. 注文を受けたコックさんが料理を作る(Model) →処理機能に特化したModelが実際に処理します。この時、データベースを使って処理することも。
  4. できた料理をお客さんに持っていく(Controller) →処理が終わったデータや結果を、Viewに渡します。
  5. 出て来た料理を、ナイフで切ったり箸でつまんだりして食べられる形に処理する(View) →最終的に、ユーザーが見られる(食事を楽しめる)形に処理をして、無事「食べる」ことができました。
    • MVCに分けるメリット

    この例では実際に、キッチン担当/ホール担当/お客さんにやってもらうセルフの作業 など、作業者が異なります。
    このように作業の役割をあらかじめ分けて整理しておくことで

    1. どこを直せばいいのかわからない
    2. 担当が分かれていないから、同時に複数の問題を直せない

      などの問題をあらかじめ防ぐことができます。
      MVCフレームワークは歴史が古く、多くのプロジェクトの基礎になっていることが多いです。

      今日はこのあたりで、失礼します。

5
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
5
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?