MVC パターン
MVC パターンとは
MVC パターンは、アプリケーションの構造を Model(モデル)、View(ビュー)、Controller(コントローラー) の 3 つの役割に分離するアーキテクチャパターンである。もともとは 1979 年に Smalltalk の GUI 設計で考案されたが、現在では Web アプリケーション開発において最も広く採用されている設計パターンの一つとなっている。
各コンポーネントの責務を明確に分けることで、コードの見通しが良くなり、変更や拡張が容易になる。
なぜ SIer で重要か
SIer の Web アプリケーション開発では、MVC パターンが事実上の標準となっている。特に Java の Web アプリケーション開発で広く使われる Spring MVC フレームワークは、その名の通り MVC パターンをベースに設計されている。設計書やコードレビューで「Controller にビジネスロジックを書かないでください」「Model と View を分離してください」といった指摘を理解するためには、MVC の基本を押さえておく必要がある。
また、SIer の現場では複数のメンバーがチームで開発を行うため、責務の分離が明確であることはコードの分担やレビューの効率化に直結する。
基本概念
Model(モデル)
アプリケーションのデータとビジネスロジックを担当する。データベースとのやり取り、業務ルールの適用、データの加工処理などがここに含まれる。
例: 商品の在庫チェック、注文金額の計算、ユーザー認証の判定
View(ビュー)
ユーザーに表示する画面(UI)を担当する。Model から受け取ったデータを HTML などの形式で表示する。ビジネスロジックは含めず、純粋に「どう見せるか」に集中する。
例: 商品一覧画面の HTML 生成、エラーメッセージの表示、帳票の出力
Controller(コントローラー)
ユーザーからのリクエストを受け取り、適切な Model の処理を呼び出し、結果を View に渡す。交通整理の役割を果たし、Model と View の仲介役となる。
例: ログインリクエストの受付 → 認証処理の呼び出し → 画面遷移の決定
処理の流れ
Web アプリケーションにおける典型的な MVC の処理フローは以下のようになる。
ブラウザ → Controller → Model → Controller → View → ブラウザ
1. ブラウザがリクエストを送信
2. Controller がリクエストを受け取り、処理内容を判断
3. Controller が Model のビジネスロジックを呼び出す
4. Model がデータベースアクセスやビジネスロジックを実行
5. Controller が Model の処理結果を View に渡す
6. View が HTML を生成してブラウザに返す
SIer での使われ方
Spring MVC との関係
SIer の Java 開発で最もよく使われるフレームワークである Spring MVC は、MVC パターンを Web アプリケーション向けに実装したものである。
| MVC の役割 | Spring MVC での実装 |
|---|---|
| Controller | @Controller アノテーションを付けたクラス |
| Model | Service クラス + Entity / DTO クラス |
| View | JSP、Thymeleaf などのテンプレートエンジン |
Spring MVC では、Controller がさらに Service 層(ビジネスロジック)と Repository 層(データアクセス)に分離されることが多い。これはレイヤードアーキテクチャとの組み合わせであり、SIer の現場ではこの構成が標準的に採用されている。
設計書との対応
SIer の開発プロジェクトでは、基本設計の段階で画面遷移図や機能一覧が作成される。この設計書と MVC は以下のように対応する。
- 画面設計書 → View の仕様
- 機能設計書 → Controller + Model の処理仕様
- DB 設計書 → Model のデータ構造
よくある間違い
新人開発者がやりがちな MVC のアンチパターンとして、以下がある。
- Controller にビジネスロジックを書いてしまう --- Controller はあくまでリクエストの振り分け役。計算処理やバリデーションは Model(Service 層)に書く。
- View にビジネスロジックを書いてしまう --- JSP や Thymeleaf のテンプレート内で複雑な条件分岐や計算を行ってしまう。表示の整形以外は Model で処理する。
まとめ
- MVC パターンは Model / View / Controller の 3 つの役割にアプリケーションを分離するパターンである
- SIer の Web アプリケーション開発では Spring MVC を通じて事実上の標準となっている
- Model はデータとビジネスロジック、View は画面表示、Controller はリクエストの振り分けを担当する
- Controller や View にビジネスロジックを書かないことが重要なルールである
- レイヤードアーキテクチャと組み合わせて使われることが多い