本記事について
業務でSpringBootのクラスの各役割について学んだ。
クラスごとの役割の種類
Controller
Service
Configuration
Interface
Entity
Repository
Utility
Exception
Advice
Interceptor
各役割
Controller
Controllerとは、主にクライアントからのリクエストを受け取って、最終的にレスポンスを返す役割。
ロジックについてはController内では行わず、Serviceのメソッドを実行する。
処理を大まかにcontrol(操作)しているイメージ。
Service
Serviceとは、Controllerでもあげた通りロジックを持たせる部分。
Serviceクラスにロジックを集中させることにより、可読性があがる。
ただ、1部のロジックについてはService内では持たせずに他のクラス(Utilityなど)に持たせた方が良い場合がある。
Configuration
Beanのデータを格納しているクラス。
そのため、主にプロパティのデータを格納していた。
getterやsetterも必要
Interface
データを呼び出す処理を、Interfaceのクラスで定義しているイメージ。
調べてみたところ、RESTクライアントをを使用する場合はInterfaceとするのが良いとのこと。
現場によってルールが違いそうなので注意したい
Entity
Entityは、データベースのテーブル構造を表している。
テーブルの内容をオブジェクトに格納する。
Repository
Repositoryは、APIやデータベースにアクセスする際に使用される。
Repositoryパッケージの中にEntityがあるイメージ。
Utility
Utilityは複数のクラスで使用しそうな処理をstatic領域において、簡単に呼び出せるようにするクラス。
StringからIntに型を変換するような処理や、共通で使用できそうな汎用的な処理を置いておくイメージ。
Exception
Exceptionクラスは、名前の通りエラーエクセプションの情報を保持するクラス。
基本的に〇〇Exceptionクラスを継承して使用する。
RuntimeExceptionクラスを継承して独自のExeptionを作ることが多い。
Advice
Adviceクラスは、throwされたExceptionの処理を共通化するクラス。
Adviceクラスで@CotrollerAdvice
と指定すれば、@Cotroller
のついたコントローラークラスでExceptionがthrowされた際に、Adviceクラスの処理に移行する。
Interceptor
Interceptorは、コントローラーの前や、特定のクラスを実行する前に実行したい処理がある場合に、使用するクラス。
事前に実行したい共通処理がある場合に重宝する。
例えば、APIを実行するための認証情報を取得する処理など入れたりする。
おわりに
Spring関係なく、Javaのコードでも使用するものも多かったが、Springでさらに役割が分別されており、可読性が高いと感じた。
他のフレームワークだとどのようなクラスの構成になるのかなどが気になった。