はじめに
SIerに入社して、早半年が経ちました。新人研修時にWebアプリケーションのアーキテクチャとしてMVCモデルを学ぶ機会がありました。最近になって、そのMVCモデルを振り返ることがあったので、今現在の自分のMVCについての考えをまとめてみたいと思います。
MVCモデル
システムを構成する部品の役割をModel,View,Controllerという3つに明確にして、開発効率の向上・保守性の向上を目指したシステムの設計モデル。OOP向けのアーキテクチャ。
Model
アプリケーションにおけるデータの保持や業務処理を実行する部品。
中でも
データの保持を行う部品を、エンティティ(RDBの表の一行と対応)やDTO(複数のエンティティからプロパティを取得したもの)と呼び、
DBにアクセスし表のCRUD操作を行う部品をDAO(データアクセスオブジェクト)と呼び、
業務処理の流れを記述する部品を(業務)LogicまたはServiceと呼ぶ。
View
ユーザーとシステムのインターフェースとして提供され、データの入力・表示画面となる部品。具体的には、JSPやHTMLのこと。
Controller
アプリケーションの動作を制御する部品。クライアントとからのリクエストを受け付けて、Modelに属する業務Logicを起動し、その結果をViewに引き渡す役割を果たす。
この部品をサーブレットと呼ぶ。
疑問点
・DAOとRepositoryの違いって?
Spring Bootでは、Repositroyパッケージに、CRUD用のインターフェースを用意していたので気になった。DAOパターンとRepositoryパターンというデザインパターンがあるらしい。
・Modelは、OOP的なアーキテクチャなのか?
Model中に、データとロジックがまとめられているのは、OOP向けのアーキテクチャのためらしい。確かに、Modelの中に、データとロジックがまとまっているが、実情は、DTOやServiceとしてデータとロジックは分離されているように見える。これは、OOP的なアーキテクチャなのか?