システム開発を学び始めると「モデル設計」や「MVC」「MVVM」といった言葉をよく見かけます。
ですが最初は、
- モデルって何?
- MVCとMVVMって何が違うの?
- 結局何を意識すればいいの?
と混乱しがちです。
この記事では、「モデル設計の基本」と「MVC / MVVMの違い」をシンプルに解説します。
モデル設計とは何か?
まず結論から言うと、モデル設計とは:
データとそのルール(ビジネスロジック)をどう表現するかを考えること
です。
モデル = データ + ルール
よく誤解しがちですが、
❌ モデル = データだけ
⭕ モデル = データ + ルール
です。
例えば:
- 名前やIDなどの情報 → データ
- 値の制約や条件 → ルール
例(イメージ)
class Sample {
String name;
int age;
void validate() {
if (age < 0) {
throw new IllegalArgumentException();
}
}
}
このように、
- データを持ち
- そのデータの正しさも管理する
のがモデルの役割です。
なぜモデル設計が重要なのか?
モデル設計が適当だと、次のような問題が起きます。
- ロジックがバラバラに散らばる
- 同じチェック処理があちこちに書かれる
- バグが増える
逆にモデル設計がしっかりしていると:
- 修正しやすい
- バグが減る
- 見通しが良くなる
MVCとは?
MVCは「役割分担」の設計パターンです。
それぞれの役割は以下の通りです:
| 要素 | 役割 |
|---|---|
| Model | データとロジック |
| View | 画面表示 |
| Controller | 処理の制御 |
MVCの流れ
ユーザー操作
↓
Controller(処理を受け取る)
↓
Model(データを処理)
↓
View(結果を表示)
ポイント
- Modelにロジックを持たせる
- Controllerは「指示役」に徹する
- Viewは表示だけに集中する
よくあるNGパターン
❌ Controllerにロジックを書きすぎる
if (age < 0) throw ...
if (name == null) throw ...
👉 本来はModelに書くべき
MVVMとは?
MVVMも役割分担の考え方ですが、主にフロントエンドで使われます。
| 要素 | 役割 |
|---|---|
| Model | データとロジック |
| View | 画面 |
| ViewModel | ModelとViewの橋渡し |
MVVMの構造
Model ←→ ViewModel ←→ View
MVCとの違い
一番の違いはここです:
Controllerの代わりにViewModelがある
MVVMの特徴
- データの変更が自動で画面に反映される(データバインディング)
- UIとロジックの分離がより強い
イメージ
- Modelの値が変わる
- ViewModelがそれを検知
- Viewが自動更新される
MVCとMVVMの違いまとめ
| 項目 | MVC | MVVM |
|---|---|---|
| 主な用途 | サーバーサイド | フロントエンド |
| 中間層 | Controller | ViewModel |
| データ反映 | 手動 | 自動 |
| 難易度 | 比較的やさしい | やや難しい |
押さえるべきポイント
一番重要なのはこれです:
モデルにロジックを持たせること
よくある誤解
❌ モデルはDBのテーブル定義
⭕ モデルは「データ + 業務ルール」
まとめ
- モデル設計は「データとルール」を設計すること
- MVCは役割分担(Model / View / Controller)
- MVVMはUI寄りの設計(ViewModelがポイント)
- ロジックはできるだけモデルに寄せる
おわりに
勉強していて気が付いたこととして最初はMVCやMVVMの違いよりも、
- 「どこに責任を持たせるか」
- 「ロジックをどこに書くべきか」
を意識することが大切だと感じました。