MVCとはシステム設計の基本概念(デザインパターン)です。
円滑にプロジェクトを作成する為に使用します。
ITの単語で不明な点がありましたら、こちらをご覧ください。
MVCとは
システム開発を円滑に行うための概念です。
クラスやシステムなどを機能別に分類して、システム設計をします。
具体的には、システムを大きく下記の3つに分類して構築を行います。
1. 機能(Model)
2. 画面(View)
3. コントローラ(Controller)
図で一連の処理を解説
図の流れとしては下記の通りです。
- ユーザが画面(View)にて入力、要求を行う
- Viewがユーザの「入力、要求」データをControllerに渡す
- 2のデータをModelが受け取り、データの加工や処理を行う
- 3で処理されたデータの結果を、Controllerに渡す
- Controllerが処理結果をViewに渡す
- ユーザへ結果(画面の更新、遷移など)が帰ってくる
よろしくないシステムの例
・Controllerに機能を実装する(演算、セキュリティ、ファイル入出力など)
・VIewからModel、またはその逆を「Controller」を介さず実行する
・View、Model、Controllerの機能が分けられていない
View -ビュー
画面です。
表示や入出力などの処理を行います。
Controller -コントローラー
制御部分です。
ViewとModelの橋渡し係を行います。
View(画面)とModel(プログラム)が直接動作するのではなく、Controllerを通してVIewまたはModelを実行します。
注意として、基本的にControllerでは橋渡し以外の機能を実装するのはよろしくないです。
Action
リクエストパラメータの受け取りと画面処理を行います。
機能的にはControllerですが、業務ではModelにあったりと曖昧な分類です。
リクエストパラメータとは
簡単にいうと、Webアプリケーションにて必要な処理をするためのデータです。
フォーム画面に入力した、氏名やメールアドレスなどが含まれます。
Model -モデル
ざっくりいうと、ViewとController以外のモノです。
DBとのやり取り、他プログラムなどの実行処理は全てModelとまとめられます。
そんなModelの中でも、更に種類を分けた機能が下記です。
Service
機能の処理です。
システム開発における、目的を達成するためのプログラムを実行します。
具体例: 『生徒管理システム』を作成する場合
・ログイン機能のクラス – ServiceLoginClass
・生徒をCRUDする機能のクラス – ServiceStudentCRUDClass
Entity(Beans)
データを情報としてまとめたモノです。
Entity、もしくはBeansとも呼ばれています。
具体例:『生徒管理システム』を作成する場合
・生徒情報のEntity(Beans)クラス – EntityStudentClass
→生徒ID、氏名、性別、住所、電話番号などをデータで保存
コードの例
public class EntityStudentClass{
/** 生徒ID */
private String student_id;
/** 氏名 */
private String student_name;
/** 性別*/
private int student_gender;
/** 住所 */
private String student_address;
/** 電話番号 */
private String student_tel;
}
DAO
データベースへのアクセスを行うモノです。
データベースにアクセスするための接続手段や、データベースから指定のデータを取得する存在です。
正式名称は『Data Access Object』といいます。
訳すとデータベースにアクセスする機能、そのままです。
具体例:『生徒管理システム』を作成する場合
・JDBCというデータベースにアクセスするための、JavaのAPIを準備するクラス – JDBCConnectClass
・データベースから生徒のデータを取得、参照、削除、変更するクラス – DAOStudentClass
DTO
データを転送するためのモノです。
DAOとServiceが送受信するデータを、一気に格納または保護する存在です。
よく使用されている形としては、ゲッター&セッターがあります。
正式名称は『Data Transfer Object』です。
Transferとは、転送という意味です。
具体例:『生徒管理システム』を作成する場合
・生徒データ転送クラス – DTOStudentClass
コードの例
public class DTOStudentClass{
/** 生徒ID */
private String student_id;
/** ゲッター */
public String get_student_id(){
return student_id;
}
/** セッター */
public void set_student_id(String student_id){
this.student_id = student_id;
}
}
ゲッター&セッターについて
ゲッター、セッターは多くの現場で使用されていますが、安心、性能も良いという訳ではありません。
問題点
・システムの複雑化、修正コストが高い
・オブジェクト指向の趣旨が逸れる
ゲッターセッターに限らず、コードのデメリットやメリットは必ず存在します。自分に何が必要なのか取捨選択しましょう。
MVCを使用した構築例
MVCを適用すると、上記の図が出来上がります。
プロジェクトや開発者によってばらつきはありますが、こちらの形状が多かったです。
Model→Javaのパッケージ内で更にDTO、Serviceなどに分けておく
View→Javaのプログラムと同じ場所ではなく、「resource」下の「template」という場所に分かれている
Controller→JavaのControllerのパッケージの中におく
最後に
システム設計の基本、MVCについては以上です。
他にもMapperといった機能分けもしますが、今回は基本・定番だけをご紹介しました。
機能は各役割でパッケージやファイルを分けて、プログラムを作成するとだけでも覚えて頂ければ大丈夫です。
要は複数の人間が見ても理解しやすい、システムの品質を上げるための概念です。
指標であっても、目的ではないのでご注意ください。
コメント