MVCの理解に向けて
はじめまして、Nと申します。
Ruby on Railsの学習にあたり、MVCの仕組みを理解する試みを記事にしてみました。
自分なりに解釈してみて例えにすることで理解を深める狙いです。
初めてのアウトプットのため至らぬ点が多いかと思いますが、是非ご一読頂けますと幸いです。
また、間違って覚えてそうなところは是非教えて頂けると大変嬉しいです!
そもそもMVCとは
ソフトウェアやWebアプリの設計モデルのこと。
「Model(モデル)」「View(ビュー)」「Controller(コントローラー)」の3つの役割に分けて作るため、その頭文字をとってMVCモデルと呼ばれる。
レストランで例えたそれぞれの役割
実際に現在開発中の筋トレ記録アプリをもとにレストランで例えて理解してみたいと思います。
近日中に筋トレ記録アプリも公開できるよう邁進中です‥!
- ブラウザ(ユーザー)
- レストランにきたお客さん
- Controllerくん
- ホールスタッフ
- Modelくん
- 厨房スタッフ
- Viewくん
- 盛付けスタッフ
- お客さん(ユーザー)が注文
- ベンチプレス60kg、5回、3セットを記録したい!
- 注文が入るとホールのControllerくんが注文を受ける
- @workout.saveにより新規登録を受け付ける
def create
@workout = Workout.new(workout_params)
if @workout.save
@exercises = Exercise.all
render format: :turbo_stream
else
@exercises = Exercise.all
render :new, formats: :turbo_stream
end
- Modelくんが厨房で注文内容を確認し、問題なければ食材庫(DB)に料理の材料を保存する
- @workout.saveが成功すると、Controllerが次の処理に進む
class Workout < ApplicationRecord
belongs_to :exercise
validates :exercise_id, {presence: true}
validates :weight, {presence: true}
validates :reps, {presence: true}
validates :sets, {presence: true}
validates :date, {presence: true}
end
- @workout.saveが成功したら、ControllerくんがViewくんに盛り付けをお願いする
- 料理の材料を保存する=@workout.saveが成功
<% @workouts.each do |workout| %>
<p class="workout-item">
<%= workout.exercise.name %><br>
<%= workout.weight %>kg
×
<%= workout.reps %>回
x
<%= workout.sets %>セット<br>
<% if workout.memo.present? %>
今日のメモ:<%= workout.memo %>
<% end %>
</p>
<% end %>
- 出来上がったものをControllerくんがお客さんに提供する
- ブラウザに返す
学びになったポイント
- 見た目をいじろうとおもってもViewだけじゃなく、Controller側で適切な処理やデータを用意する必要がある
- 最後にViewが表示するためにはControllerが運ばないといけない
- なのでControllerで書いている内容が間違っているとViewに正しく届かない