TERASOLUNA Framework 5系ガイドライン読んだ(第3章 アプリケーション開発)

Webアプリケーション向け開発プロジェクトの作成

ドメイン層の実装

ドメイン層は、アプリケーション層に提供する業務ロジックを実装するためのレイヤである。

Entityの実装方針

  • Entityクラスはテーブルごとに作成する。
  • テーブルにFKがある場合はFK先のテーブルのEntityクラスをプロパティとして定義する。
  • コードテーブル系はEntityとして扱うのではなく、java.ang.Stringなどの基本型で扱う。

Repositoryの実装方針

  • Repositoryは主体となるEntityに対して作成する。
  • RepositoryインタフェースとRepositoryImplは基本的にドメイン層の同じパッケージに配置する。
  • Repositoryで提供するDTOはRepositoryインタフェースと同じパッケージに配置する。

Serviceの実装方針

  • Serviceはビジネスルールに関わる処理の実装に専念する。
  • トランザクション境界は原則Serviceに設ける。
  • 他のServiceクラスのメソッドを呼び出すことは原則禁止。溶融したい場合はSharedServiceクラスを作成する。
  • 業務データを中心に設計・実装する場合はEntityごとにServiceを作成する。
  • 画面からのイベント中心に設計・実装する場合はユースケースごとにServiceを作成する。
  • BLogicクラスを作成する場合はイベントごとにServiceを作成する。

トランザクション管理について

宣言型トランザクション処理を利用する。

  • トランザクシション管理対象とするクラスまたはクラスメソッドに対して@Transactionalアノテーションを指定する方法を推奨する。
  • bean定義ファイルに要素を追加することで@Transactionalアノテーションを使ったトランザクション境界の指定が有効になる。

インフラストラクチャ層の実装

インフラストラクチャ層では、RepositoryImplの実装を行う。

RepositoryImplの実装

MyBatis3を使ってRepositoryを実装
  • アプリケーション開発者はRepositoryインタフェースとマッピングファイルを作成し、基本的にRepositoryImplの実装は必要ない。
JPAを使ってRepositoryを実装
  • 基本的なCRUD操作はIpaRepositoryを継承したインタフェースを作成するだけで、基本的にRepositoryImplは不要。
  • 動的なクエリ(JPQL)を発行する必要がある場合にはRepositoryImplが必要になる。

アプリケーション層の実装

Controllerの実装

Controllerの役割
  • @RequestMappingアノテーションを付与し、リクエストを受け取るためのメソッドを提供する。
  • リクエストパラメータの入力チェックを行う。
  • 業務処理の呼び出しを行う。
  • 業務処理の処理結果をModelに反映する。
  • 処理結果に対応するView名を返却する。
Controllerクラスの作成方法

POJOクラスに@Controllerアノテーションを付与したクラスを作成する。

@Controller
public class SampleController {
// ...
}
リクエストとハンドラメソッドのマッピング方法

リクエストを受け取るメソッドは@RequestMappingアノテーションを付与する。

@RequestMapping(value = "hello")
public String hello() {
// ...
}

フォームオブジェクトの実装

HTML状のformを表現するオブジェクト(JavaBean)であり、以下の役割を担う。

  • DBで保持している業務データを保持し、HTML(JSP)formから参照できるようにする。
  • HTML formから送信されたリクエストパラメータを保持し、ハンドラメソッドで参照できるようにする。

View(JSP)の実装

TERASOLUNA Frameworkガイドラインでは、JSPを使用してViewを実装する。