MVCモデルの構造について
基礎カリキュラムに登場したMVCモデルについて、疑問に思うところがあったため深掘りをしたことがありました。それについてアウトプットをしていきます。
深掘りをした内容としては、
ルーティングとコントローラーは、コントローラー名とアクション名をコードに書いたのに、なぜビューではディレクトリ名、ファイル名にそれぞれ記述されるのだろう、という部分。
_____________________________________
<例>
ルーティング get 'post',to: '(コントローラー名)#(アクション名)'
コントローラー class (コントローラー名)_controller < App...
def (アクション名)
end
ビュー app/views/(コントローラー名)/(アクション名)
______________________________________
カンニングペーパーとして配布された画像を見ていただいた方がイメージがしやすいかもしれませんが、とにかく、コントローラー名とアクション名がビューではディレクトリ、ファイル名として扱われることを疑問に思いました。
自分は物覚えが悪いので、MVCで(コントローラー名とアクション名の)扱いを統一にして欲しかったです。最初は、扱い辛そうだと思っていましたが、よくよく考えてみると、
app/views/(コントローラー名)/(アクション名)
という形の方がユーザー(エンジニア)にとって都合がいいのでは? と思い直しました。
今までは、1つのコントローラーに対して、1つのビューを扱ってイメージをしていましたが、実際は、
A(コントローラー) > B(アクション)
C(アクション)
D(アクション)
B(コントローラー) > E(アクション)
F(アクション)
G(アクション)
というふうな形で扱われます。
そして、それぞれのアクションによって返す見た目、すなわちビューが異なります。もしも、ビューが今のような構造でなければ、1つのファイルに複数個のアクション用の見た目を記述しないといけないことになります。
_____________________________________
<例>
ビュー app/views/見た目を決めるぞ
〜コントローラーAのアクションBの見た目〜
<html css>
<% ruby %>
<%= ruby %>
〜コントローラーAのアクションCの見た目〜
<html css>
<% ruby %>
<%= ruby %>
〜コントローラーAのアクションCの見た目〜
<html css>
<% ruby %>
<%= ruby %>
______________________________________
個人的な意見ではありますが、とても分かり辛いです。ぱっと見、どのコードがどのアクションの見た目を作っているのかも判断できないと思います。
それよりも、コントローラー名のディレクトリに格納されている、アクション名のフォルダの中に、それぞれの見た目を記述して行った方が遥かにわかりやすいですよね。
こういった背景もあり(おそらく)、ビューの、コントローラー名とアクション名の扱い方は、ルーティングとコントローラーとは異なっているのでしょう。
このような内容のブログを、これからもつらつらと書き連ねていきます。
時間があれば読んでいただけると幸いです。