🐡

Java | SpringBoot | CRUD(クラッド)とMVCモデル

2024/12/14に公開

Java

SpringBoot

CRUD(クラッド)

  1. CRUD(クラッド)は、以下の頭文字をとった言葉。
CRUD(クラッド) 内容
Create データの作成
Read 読み取り
Update 更新
Delete 削除
  1. 基本的にCRUD機能は扱うデータの数だけ必要。
  • 民宿サイトのCRUD構築例
以下のそれぞれにCRUD機能が必要 内容
ログインする「ユーザー」というデータ usersテーブル
予約する「民宿」というデータ housesテーブル

MVCモデル

MVCモデルはSpring Bootを含む多くのフレームワークで採用されている。
Rubyの代表的なフレームワークであるRuby on RailsもMVCモデルを採用している。

  1. MVCは、以下の頭文字をとった言葉。
    • モデル(Model)
    • ビュー(View)
    • コントローラ(Controller)
MVC 役割
モデル アプリの「処理」を担当。データベースとやりとりし、データの作成、読み取り、更新、削除といった処理を行う。
ビュー アプリの「表示」を担当。コントローラから受け取ったデータを使って動的にHTMLを生成する。
コントローラ モデルとビューを制御する。ユーザー、モデル、ビューの橋渡し役。
MVCモデルを採用する主なメリット 備考
複数人で開発する際に分業しやすい フロントエンドが得意なエンジニアがビューの作成を担当し、バックエンドが得意なエンジニアがモデルやコントローラの作成を担当する。
それぞれの独立性が高いので、コードを修正しても影響が少ない コードを修正しやすい。

モデル(Model)

  • "モデル(Model)"はアプリの「処理」を担当する。
  • 具体的には、データベースとやりとりしてデータの作成、読み取り、更新、削除といった処理を行うのが主な役割。
  • データベース(厳密にいえばデータベースのテーブル)とやりとりするのがモデルの主な仕事なので、モデルはテーブルごとに作成する。
  • Spring Bootでは"モデル(Model)"をさらに役割分担し、以下のようにファイルを分けることが多い。
役割 説明 ファイル名の例
エンティティ(Entity) テーブルの1行をオブジェクトとして表現するためのクラス。エンティティにはテーブルのカラムに対応するフィールドと、それらのフィールドにアクセスするためのゲッター、セッターを定義する。 House.java
サービス(Service) ビジネスロジック(「宿泊人数が定員を超える場合は予約できないようにする」など、そのアプリ固有の処理やルールを実装する部分のこと)を担当する。 HouseService.java
リポジトリ(Repository) データベースにアクセスし、CRUD処理を行う。データはエンティティとしてやり取りする。 HouseRepository.java

ビュー(View)

  • "ビュー(View)"はアプリの「表示」を担当する。
  • 具体的には、コントローラから受け取ったデータを使って動的にHTMLを生成するのが主な役割。
  • Spring Bootでは、"Thymeleaf(タイムリーフ)"と呼ばれる"テンプレートエンジン"の利用が推奨されている。

[テンプレートエンジン]
"テンプレートエンジン"とは、簡単にいえば、JavaやRuby、PHPなどの サーバーサイド言語HTML合体 させてビューを出力してくれる仕組みのこと。
"ビュー(View)"は基本的にHTMLと同じように記述できる。
if文を使って条件分岐させたり、繰り返し処理をおこなったり、変数の値を表示したりすることも可能。

コントローラ(Controller)

  • "コントローラ(Controller)"は、"モデル"と"ビュー(View)"を制御する役割を担当する。
  • "コントローラ(Controller)"とは、いわば、"ユーザー","モデル(Model)","ビュー(View)"の橋渡し役。
  • "コントローラ(Controller)"とは、オーケストラの指揮者に例えると、"ユーザー=観客"、"モデル(Model)=演奏者"、"ビュー(View)=奏でられる曲"といったイメージ。
  • Spring Bootの"コントローラ(Controller)"には、主に以下の内容を記述します。
"コントローラ(Controller)"に記述する内容
対応するパス(どのURLにアクセスされたときに処理を実行するか)
モデルに実行してもらう処理
呼び出すビューのファイル名

Discussion