この記事の位置づけ
先日まで行っていたインターン中に触れた事項について復習しながらまとめる記事となっています。自分の感じたことを残しておくという意味で書いている側面もあるので、誤りも多々あると思いますがご容赦ください。これら気が向いたらご指摘いただけると幸いです。
この記事ではMVCモデルについて記述を行います。ASP.NETを用いたプロジェクトの体験を行った経験を基に記述していきます。
MVCモデルとは
MVCモデルはデータ・ユーザインタフェース・アプリケーションロジックをModel, View, Controllerの3つに分割して記述するモデルを指します。モデルの考え方に基づいてコードを作成することによってファイル構造などを整えることができ、開発作業や保守作業を効率的に行うことができます。
(Microsoft(参考1)などはMVCをデザインパターンとしてMVCパターンとしています。ただ、MVCをデザインパターンの1種としては扱わない記事などが多々見られたので、ここでは参考程度に記述するにとどめておきます。)
Model
Modelはデータを扱うために利用されます。ViewのUI上で入力されたデータをModelに入れて、それを基にデータベースとやり取りして、またViewでデータを表示するなど、データベースとデータをやり取りするうえで利用するものです。
プロジェクトで「~Model」というクラスのインスタンス変数にデータを入れて、コントローラーやロジックで処理していたので、やり取りに利用するための複数のデータを保持しておくものというイメージを個人的には持っています。(このイメージだとDTOになってしまう...)
Modelにはビジネスロジックを含むようです。
(インターンだと、~Modelはデータを格納しておくクラスで、Logicは処理を記述する別ファイルで、Controllerで呼び出されるという形だったので、モデル=DTOみたいなイメージがついてしまったので違和感が多少あります。本来Logicのファイルに記載するべき要素が一部Controllerのファイルに残っていることもあって、Controllerとロジックの関連が強い印象が残っているせいだと思います。ただ、Controllerにロジックを書くな的な話もあるので、当てはまる場所としてはModelしかないですかね。)
(データベースとのやり取りを行うDAOはデータの処理だからModelに含まれるのですかね。ただ、ビジネスロジックとデータアクセスは別物という話もあるので、もうわかんないなぁ...)
View
Viewはアプリケーションのユーザインタフェース(UI)に当たるものです。画面表示を担当します。Modelが持つデータを参照してデータの表示を行います。また、データの入力を受け付けてmodelにデータを入れるのもViewの担当のイメージです。
(ControllerでGetViewという名前のメソッドを使って表示が行われていた印象が強いです。)(インターンだとRazorを利用してページを生成していました)
Controller
ModelとViewの制御・仲介を行うものです。Viewを呼び出してのUIを生成や、ModelのLogicやDB操作などの呼び出しを行います。操作や処理の流れに応じてViewやLogicを呼び出す役割です。
Logicなどは処理の順序的にはControllerにも書くことができますが、ファイルに記述される処理が膨大となり、役割から外れるので、書かないようにした方が良いです。
インターン中に学んだ事項
ファイルに記述する内容
~Model:Modelで扱うデータを入れるクラスを定義します。別ファイルのクラスを継承する場合もあります。
~Controller:コントローラーの処理を記述します。このファイルでは~Modelで定義したクラスのデータなどを引数として~Logicの関数を呼び出してモデルのデータの制御などを行います。また、Viewの取得もControllerの関数で行います。
~Logic:~Controllerのファイルに記載されているメソッドから呼び出されます。入力値の条件チェックや、データベース操作を行うための~Daoのメソッド呼び出しを行います。Daoの操作が行えるようにデータを別のクラスに入れて渡すこともあります。
~Dao:DB操作を行います。引数として与えられたデータを基にSQL文を実行します
ここでは別ファイルのSQLを読み込み、引数として与えたデータを基にしてSQLの内容を置換することで動的にSQLを生成して実行することもあります。
意識する事
各ファイルにはそれぞれ機能として想定する役割があります。このため、各ファイルの役割を逸脱しないように処理の記述を行いましょう。特に、Controllerは本来Logicに分けるべき内容を記述して膨大になってしまうことがあるので注意しましょう。
参考
Microsoft, 「ASP.NET MVC パターン」, https://dotnet.microsoft.com/ja-jp/apps/aspnet/mvc
Geekly Media, 「MVCモデルとは!概念やそのメリットをわかりやすく解説!」,
https://www.geekly.co.jp/column/cat-technology/1911_040/#View
@s_emoto, 「MVCモデルについて」, https://qiita.com/s_emoto/items/975cc38a3e0de462966a
@kunrenyouAcount, 「MVCモデルについて」, https://qiita.com/kunrenyouAcount/items/bcb040dc42708d0844ce
@os1ma, 「『ビジネスロジック』とは何か、どう実装するのか」, https://qiita.com/os1ma/items/25725edfe3c2af93d735
@RINYU_DRVO, 「DTO(Data Transfer Object)」, https://qiita.com/RINYU_DRVO/items/112957b84ec8c2a4711a