ドメイン・モデルの基本構成要素
SimpleModelingではドメイン・モデルを構成する基本構成要素として以下のものを使用します。
-
エンティティ
-
バリュー
-
データ型
-
パワータイプ
-
サービス
-
イベント
-
ルール
-
サブシステム
SimpleModelingでは、現実世界の構造をこれらのモデル要素を使って写し取ります。

ドメイン・モデルのモデルであることを明示したい場合には、ドメイン・エンティティなどのように先頭に「ドメイン」をつけますが、ドメイン・モデルについて議論している場合には単に「エンティティ」というように先頭に「ドメイン」をつけないで呼ぶことにします。
分類子
UML (Unified Modeling Language)ではモデル要素の中のクラス的なモデル要素を分類子(classifier)と呼びます。
分類子の一種として以下のモデル要素が存在します。
-
クラス
-
データ型
-
パワータイプ
クラスは後ほど取り上げるとして、それ以外の分類子直下にあるモデル要素について説明します。
なお分類子はドメインの構成要素の分類上、本記事に登場していますが、ドメイン・モデリングの中ではほぼ登場することはありません。
ドメイン・データ型
ドメイン・データ型はドメイン・モデル内で定義しているデータ型です。
データ型は「プロファイル:基本データ型」で用意している基本データ型をベースに、制約や意味を付与したドメイン固有のデータ型を定義します。
例: EmailAddress, PostalCode
ドメイン・エンティティ
ドメイン・エンティティはドメイン・モデルを構成するエンティティ・オブジェクト (entity object)です。
データベースなどに記録され、ソフトウェアの開始終了のライフサイクルを超えて永続的に存在し続けるオブジェクトです。
SimpleModelingではドメイン・エンティティは以下の4種類に分類されます。
-
ドメイン・リソース
-
ドメイン・タスク
-
ドメイン・アクター
-
ドメイン・ロール
ドメイン・リソース
ドメイン・リソースはソフトウェアの動作に必要な「資源」に関する情報を表すエンティティ・オブジェクトです。
- 性質
-
静的(マスターデータ)
- 生成タイミング
-
システム運用前または安定時に登録
- 主な目的
-
情報の定義・参照
- 永続性
-
長期間参照され、頻繁には変更されない
- 状態遷移
-
通常運用中での状態遷移はもたない
- 関係性
-
他のエンティティに参照される(参照される側)
- 削除・変更
-
滅多に削除されず、変更も限定的(履歴保持が前提)
- アプリケーションUI
-
参照や選択のUIが必要
- 代表例
-
顧客、商品、倉庫、部署など
ドメイン・タスク
ドメイン・タスクはソフトウェアの動作中の「動作」に関する情報を表すエンティティ・オブジェクトです。
- 性質
-
動的(トランザクションデータ)
- 生成タイミング
-
業務処理中に逐次生成される
- 主な目的
-
業務の実行・記録
- 永続性
-
永続化されるが、完了後は基本的に不変
- 状態遷移
-
明確な状態遷移を持つ(例:草稿→確定→完了)
- 関係性
-
他のエンティティを参照する(リソースを使う)
- 削除・変更
-
完了後は基本的に変更しない(監査目的)
- アプリケーションUI
-
作成・編集・処理・状態遷移のUIが必要
- 代表例
-
受注、支払、休暇申請、問合せ、承認依頼など
ドメイン・イベント
ドメイン・イベント (Domain Event, ドメインイベント)は、ドメイン内で発生するイベントをモデル化したものです。
業務上の状態変化を記録し、通知やイベントソーシングなどにも活用します。
例:注文確定(OrderConfirmed)、在庫変動(InventoryChanged)
ドメイン・サービス
オブジェクトに帰属しない手続的な業務ロジックを表現します。
サブシステム/コンポーネント外部に公開する処理や、複数のドメイン・オブジェクト (Domain Object)を横断的に扱う処理に適用されます。
例:請求書の発行、決済処理、在庫の一括調整
ドメイン・オブジェクト
ドメイン・オブジェクトという用語は狭義にはドメイン・クラスのインスタンスを指しますが、SimpleModelingでは広義の意味として、ドメイン・モデルを構成する分類子全般を定義とインスタンスを含めてドメイン・オブジェクトと呼ぶことにします。
具体的には本記事で説明した以下の分類子が該当します。
状態機械
状態機械は、ドメイン・オブジェクトのライフサイクルにおける状態変化や制御ルールを定義する仕組みです。
特にドメイン・タスクなどのエンティティは、明確な状態遷移を持ち、業務の進行状況を状態として管理します。
状態機械は分類子ではありませんが、ドメイン・モデルの振る舞いを明示的に表現するための重要な要素です。