MVCモデルについて
WEBアプリについて独学や講義を受けるとMVCモデルについて学ぶと思います。
MVCモデルについてはそれぞれの役割についてまとめます。
- M(Model):アプリケーションのビジネスロジックを担当。データの更新等を行う
- V(View):ユーザに表示するビュー。モデルで取得したデータを利用してレンダリングする
- C(Controller):ユーザの入力を処理し、入力データに基づきモデルを操作し、結果をビューに返却する
MVCモデルについては以下のようなイメージになるかと思います。
MVCモデルイメージ
MVCモデルの動作について
ユーザにはViewを返却することになりますが、コーディングとしていると、コントローラーで返却することになるため、モデルイメージと若干のギャップがあるかと感じると思いますので、具体的にどのような動作になるのか説明したいと思います。
- ユーザがボタン押下でControllerはリクエストを受領
- ControllerはModelにアクセスしてデータ取得を行い、Controllerに処理返却
- ContorllerはModelから取得したデータをViewにバインドし、WEBにHTMLを返却
実際にコーティングを行うと、ViewがクライアントにHTMLを返却するわけではなく、ControllerがView(HTMLテンプレート)に記載されているバインドする変数を準備し、View(HTMLテンプレート)とバインドする変数を返却するフローとなります。
コードイメージについて記載します。
※以下コードについては処理イメージとなります。
View
<!DOCTYPE html>
<html>
<head>
<title>Form Submission Result</title>
</head>
<body>
<h1>Submission Result</h1>
<p>Name: <%= request.getAttribute("name") %></p>
<p>Email: <%= request.getAttribute("email") %></p>
</body>
</html>
Controller
public class SubmitFormServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = UserDaoImpl.getUserDao();
request.setAttribute("name", user.name);
request.setAttribute("email", user.email);
// 結果を表示するJSPにフォワード
RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp");
dispatcher.forward(request, response);
}
}
Model
public class UserDaoImpl Implemetns UserDao {
@Override
public getUser( int index ) {
// User情報を取得する
// User user = get・・・
return user
}
}
まとめ
MVCの開発について説明をしました。
コードを見てわかるように、ControllerがModelの取得し、取得結果をViewにバインドすることでHTMLを返却します。
Contollerはリクエストを受け取り、何かしらの処理を行い、Viewにバインドし返却することで、HTMLが表示されます。
記事が参考になれば幸いです。