MVCについてわかっていることをまとめる


事前知識(間違っている部分がある可能性)

全体の流れ

  1. URLが入力されるとルーティングを操作するroute.rbにURLのルーティングと一致したコントローラのアクションに割り振る.
  2. 割り振られたコントローラのアクション内で操作を行う.
  3. この際にモデルとコントローラでのやり取りを行い,もしデータベースとのやり取りが行われる際はモデルが担当する.
  4. コントローラとモデルのやり取りを行いながら,アクション名と同じビューにコントローラのデータ(インスタンス変数)を渡してHTML等を描画する.
  5. 描画されたHTMLファイルをコントローラで受とり,それをブラウザに返す.

MVCの役割

  • Model

    Model(以下モデル)はデータベースの操作や,データの管理等のビジネスロジックを行うもので,
    特に重要なデータの処理等はここに書くべきである.
    ただし,モデル自体が肥大化する可能性があるので,気をつけなければならない.

  • Controller

    Controller(以下コントローラ)は主にビューやモデルとのやり取りを行い,やり取りは各アクションで
    まとめられている.
    コントローラは軽量であるべきなので,処理は各コントローラのヘルパーやモデルに書くべきである.

  • View

    View(以下ビュー)は主にコントローラとやり取りを行い,コントローラからのデータを取得して,
    専用のERB(埋め込みRuby)を使う.
    ERBは最終的にHTMLとして描画される.
    モデルからのデータはすべてコントローラを中継してビューに送られる.
    ビューではDRYに基づいて部分ビュー(パーシャル)を使ってERBを細かく分けることができる.
    ビューのHTMLはコントローラを経由してブラウザに送られる.

MVCの調査

MVCが使われる理由

簡単に言うと質の高いインタラクティブなアプリケーションを作成する際に役割を分けて分業ができるため.
なので,変更があっても他には変更の影響を受けにくくて済む.

MVCモデルについて

MVCには2種類の構造がある.これらの違いはMVCがやり取りを行う際にどういったやり取りをするかである.

  1. Push-MVC
  2. Pull-MVC
  • Push-MVC

このMVCではモデルとビューがどのようにやり取りを行うかと言うときに,コントローラが中間となってモデルとビューのやり取りを行うMVCである.
RailsはこのPush-MVCを採用している.

  • Pull-MVC

このMVCではモデルとビューが直接やり取りを行う.

なぜPush-MVCなのか?

Pull-MVCを実装するとなると,2つの問題が生じる.

  1. 特にビューがHTMLを描画する際に必ずモデルにアクセスを掛ける必要があり,Push型と比べて描画速度が遅くなる.
  2. HTTPの性質ステートレスがビューとどのモデルに紐付けられているかという情報を忘れてしまうため,セッションに関連付けの情報を保持する必要があり,実装が難しくなる.

このため実装は難しいとされている

M,V,Cについて(事前知識からの付け加え)

  • Model(モデル)

    Model(以下モデル)はデータベースの操作や,データの管理等のビジネスロジックを行うもので,
    アプリケーションの状態を表したり,その状態を加工するメソッドをまとめたもの.
    その為,肥大化してしまう.

  • Controller(コントローラー)

    ユーザの操作に基づき,加工したモデルの操作をする役割を持っている.その為,コントローラーは肥大化しない.

  • View(ビュー)
    モデルの状態を参照し,視覚表現するもの.