MVCモデルについて少し向き合ってみるメモ
MVCモデルっていうのを、なんとなく理解はしていましたが、言語化して説明できる自信がなかった為、この機会に調べたことをアウトプットします!
ちなみに、railsをもとに調べていきます!!
それでは、レッツゴーッ💪
MVCモデルとは
MVCモデルとは、Webサービスなどを作る際に、役割ごとに機能を分けて管理しやすくしようというモデルのことです。
役割が分かれていると、どの部分でエラーが起きているのかなどがわかりやすくなるのが利点だと思っています。
ちなみに、お気づきかとは思いますが、MVCは、
Model(モデル)、View(ビュー)、Controller(コントローラー)のそれぞれの頭文字をとったものです。
M(モデル)とは
M(モデル)は、データベースから取得したデータを使いやすいように処理をしたりする場所のこと。また、データを管理するコードがここに集まるので、データに関する不具合があればここが原因だとわかることも...
railsだと、
validates :title, presence: true
こんな感じで、書いている場所ですね。
V(ビュー)とは
WebブラウザでHTMLが表示されるときの処理を書くところ。
HTMLの中に動的な処理を埋め込むことも可能!
railsだと、show.html.erbとかですね。
<% if flash.notice %>
<p class="notice"><%= flash.notice %></p>
<% end %>
<% if flash.alert %>
<p class="alert"><%= flash.alert %></p>
<% end %>
railsでは、このように<%%>や<%= %>などを用いることで、htmlにif文などの処理を埋め込めます。
これができるおかげで、動的にメッセージを表示したりできるんですね。
C(コントローラー)とは
コントローラーはViewとModelを操作するもの。(架け橋的な感じ)
細く言えば、Viewからリクエスト(GETやPOSTなどの命令)を受け取り、Modelにそれを渡す。また、Modelから処理された結果をレスポンスとしてViewへ返すこと。
railsでは、
def create
@plan = Plan.new(params.require(:plan).permit(:title))
if @plan.save
flash[:notice] = "新しいプランを作りました"
redirect_to :plans
else
flash[:alert] = "登録できませんでした"
render 'new'
end
endこ
こんな感じですね。
全体の流れ(ザックリ表すと)
Viewが、リクエスト(今回なら、プランを作って)をControllerに渡す。
↓
ControllerはこのリクエストをModelに渡す(今回なら、データベース新しいプランを作りなさい)
↓
Modelは、渡されたパラメータが正しいどうかで、データベースに保存できるかどうかを判断する。(今回は正しいので保存可)
↓
Modelは、データを保存できたことをControllerに伝える
↓
Controllerは、保存できたことを知らせるメッセージをViewに渡す処理や、レスポンスなどを返す。
↓
レスポンスや処理を受け取ったViewが動的に変化する。
まとめ
私にとって、どの処理をMVCのどこに書くのか分からずに困ることがたくさんあったので、ザックリまとめてみました。
MVCの決まりとしては、
・Viewにはあまりを処理を描かない
・Controllerにも長い処理を書いてはいけない
・Modelは、処理が多くても大丈夫
というのが原則みたいです。
また、modelになんでもかんでも処理を書くのがいいというわけではなく、
例えば、N + 1問題を解決する.includes()などは、View側のロジックに密接に関連しているという考えから、Controllerに書くべきというのもあります。
上記のような原則というものは、まだまだ知らないので、機会があれば調べようを思います!