Spring Frameworkとは
Java開発におけるフレームワーク
以下全体像(一部)
Spring Boot
Spring アプリケーションを煩雑な設定をせずに迅速に作成する機能
Spring プロジェクト
-
Spring MVC
Webアプリケーションを簡単に作成する機能
(詳細を記述) - Spring Data
データアクセスに対する機能 - Spring Batch
バッチ処理機能 - Spring Batch
認証/認可の機能 - Spring コア
- Spring DI
依存性注入(Dependency Injection)の機能 - Spring AOP
アスペクト指向プログラミング(Aspect Oriented Programming)の機能
Spring MVCとは
まずMVCモデル
利点
- 役割分担することで効率的に開発が行われる
- 開発を行うエンジニアの分業が容易になる
- 仕様変更に柔軟に対応できる
問題点
- 業務で扱うデータ要件が複雑になればなるほど、Model が肥大化していく
解決方法→レイヤアーキテクチャの導入 - 入力に応じた出力要件が複雑になればなるほど、Controller と View の依存性が高くなる
Spring MVC
概要
Webアプリケーションを簡単に作成する機能
デザインパターンの一つ「フロントコントローラ・パターン」で実装
全てのリクエストは「フロントコントローラ」が受け取り、その後適切な処理をするコントローラに割り振る設計
全体像
構成要素
オブジェクト | 機能概要 |
---|---|
Dispatcher Servlet | 全てのリクエストを受信するフロントコントローラ |
Model | 「Controller」から「View」に渡す「表示データ」など格納するオブジェクト |
Controller | リクエストに応じた処理を行う |
View | 画面表示処理を行う |
Service | 「Controller」から渡されデータベースへアクセスしてデータを取得、データの加工するなど、開発者が設計実装する ※図にはないし、Spring MVCには関係ない |
レイヤアーキテクチャの導入
MVCモデルの問題点
業務で扱うデータ要件が複雑になればなるほど、Model が肥大化していく
を解決するためにModelに役割分担を持たせより明確に分割する
考え方をレイヤ化という
(ここはSpring MVCのModelと違う)
レイヤ化
レイヤ化にも色々な種類が存在するが
多分FS3では 実践ドメイン駆動設計(DDD)をもとにした 4 層でできている
レイヤー | 機能概要 |
---|---|
UI 層 (プレゼンテーション層) | ユーザのリクエストを受付け、レスポンスを画面に表示する層 例:View |
アプリケーション層 | 「クライアント」から受け取った「リクエスト」 を制御し、「ドメイン層」を使ってアプリケーションを制御する層 例:Controller |
ドメイン層 | 「Domain Object」に対するアプリケーションの「サービス処理」を実行する層 |
インフラストラクチャ層 | 「Domain Object」に対する「CRUD操作」を行い、データの永続化を担う層 |
レイヤ化別コンポーネント
構成要素
レイヤー | コンポーネント | 機能概要 |
---|---|---|
UI 層 (プレゼンテーション層) | View | 見た目、画面 |
アプリケーション層 | Controller | 「リクエスト」を処理にマッピングし、結果を「View」に渡すという制御を行う。主な処理は「Controller」内では行わず「ドメイン層」の「Service」を呼び出しを行う |
ドメイン層 | Domain Object | 「サービス処理」を実行する上で必要な資源(Entityなど) |
Service | アプリケーションの「サービス処理」そのもの | |
Repository | 「Repository」は「インターフェース」で、「データベースへのデータ操作」定義のみを記述(実装内容は記述しない) | |
インフラストラクチャ層 | RepositoryImpl | 「ドメイン層」で定めた「Repository」の実装クラス、「O/R Mapper」が「Repository」の実装クラスを作成する場合もある |
O/R Mapper | 「O:オブジェクト」「R:リレーショナルデータベース」とのデータをマッピングする |