ビジネスロジック(ドメインロジック)をどうやってモデリングして、どうやって実装するかの実践例を公開しました。
RDRA 2.0 ハンドブックの図書館システムの実装例 (github)
ビジネスロジックのもとになる業務モデルやビジネスルールのモデリングは、 モデルベースの要件定義手法 RDRA2.0 を使っています。
RDRA 2.0 ハンドブック (Kindle Unlimited会員は無償です)
実装技術は、Java/Spring Boot/MyBatis/Thymeleafを使っています。
JIGという設計の可視化ツールを使って、ソースコードからパッケージ関連図やクラスの一覧を自動生成しています。
利用方法
- RDRA 2.0 ハンドブックを入手
- リポジトリRDRA 2.0 ハンドブックの図書館システムの実装例をクローン
- Gradleタスク bootRunを実行(アプリケーションの起動)
- Gradleタスク jigReportを実行(設計ドキュメントの出力)
アプリケーションの内容
RDRA 2.0 ハンドブックのサンプル「図書館システム」の以下の業務を実装しています。
http://localhost:8080
でトップ画面を表示できます。
設計ドキュメント
JIGを使ってソースコードから設計ドキュメントを自動生成します。ドキュメントはbuild/jig ディレクトリに出力されます。
JIGドキュメントの生成には、 Graphviz のインストールが必要です。
実装の範囲
ビジネスルールを中心に実装しています。
RDRA 2.0で可視化した以下のビジネスルールと関連するユースケース・画面・テーブルを実装しています。
- 貸出制限ルール
- 予約の状態遷移
貸出業務と貸出制限ルール
予約の状態遷移
以下の業務は未実装です。
- 蔵書管理(書籍の注文と蔵書として登録する)
- 会員管理(会員の登録)
要件定義・仕様化・実装の継ぎ目をなくす開発手法
この図書館サンプルは、以下の考え方とやり方で実装しています。
三層構造+ビジネスロジック
ビジネスロジックを独立させるドメイン駆動設計のアプローチを採用しています。
ドメインオブジェクトを中心にしたアプリケーション構造
RDRAの要件定義モデルと実装を、以下のように対応させています。
Spring MVCとMyBatisを使い、ドメインオブジェクトを中心に周辺の外部形式との双方向のマッピングを実現するアプリケーション構造を採用しています。
ドメインオブジェクトのモデル(ビジネスロジックの表現)
ソースコードから、JIGで自動生成したドメインモデルのパッケージ構成図です。
このモデルを中心に図書館アプリケーションを組み立てています。
CCSR: Continuous Concurrent Stepwise Refinment
開発手法として、要件定義・仕様化・実装の継ぎ目をなくすCCSR手法を採用しています。
この図書館サンプル実装は、CCSR手法の実践例として開発しています。
参考記事: 要件定義・仕様化・実装の継ぎ目をなくすCCSR開発手法
RDRAアドイン
RDRA手法のモデリングツールとして、Enterprise ArchitectのRDRAアドインを使っています。
JIG (設計可視化ツール)
Javaで記述した内容を、俯瞰したり、一覧するためのツールです。
プログラミング言語で仕様を記述するCCSR手法を実践するために必須のツールです。
RDRA - CCSR - JIG 関係図
RDRAのモデル要素(左)、三層+ビジネスロジックの構造(中央)、JIGの出力ドキュメント(右)の対応関係です。
ビジネスルール駆動
図の青背景でしめした、RDRAで可視化したビジネスルールをドメインモデルとして実装することが、このアプリケーションの中核です。
RDRA 2.0で可視化された内容と、実装された内容の対応は、以下のJIGドキュメントで確認できます。
- ユースケース複合図
- パッケージ関係図(depth4, depth5)
- 区分図と区分使用図
- メソッド呼び出し関係図
参考情報
- 書籍:現場で役立つシステムの原則 ~変更を楽で安全にするオブジェクト指向の実装技法
- ドメインオブジェクトの設計パターン:設計ガイドライン
- オブジェクトと外部形式のマッピング技法の説明:CCSRオブジェクトマッピング