ドメイン・モデルの基本構成要素
SimpleModeling (シンプルモデリング)ではドメイン・モデル (Domain Model)を構成する基本構成要素として以下のものを使用します。
SimpleModelingでは、現実世界の構造をこれらのモデル要素を使って写し取ります。
分類子
UML (Unified Modeling Language)ではモデル要素の中のクラス的なモデル要素を分類子 (Classifier)(classifier)と呼びます。
分類子の一種として以下のモデル要素が存在します。
クラスは後ほど取り上げるとして、それ以外の分類子直下にあるモデル要素について説明します。
なお分類子はドメインの構成要素の分類上、本記事に登場していますが、ドメイン・モデリング (Domain Modeling)の中ではほぼ登場することはありません。
ドメイン・データ型
データ型は「プロファイル:基本データ型」で用意している基本データ型をベースに、制約 (Constraint)や意味を付与したドメイン固有のデータ型を定義します。
例: EmailAddress, PostalCode
ドメイン・パワータイプ
ドメイン・パワータイプはドメイン・モデル内で定義しているパワータイプです。
伝統的な区分コードと近しい目的で使用します。
プログラムでの実装時にはenum型を使用することが多いでしょう。
例: 顧客種別(CustomerType)、商品カテゴリ(ProductCategory)
ドメイン・サブシステム
サブシステムはコンポーネントの一種であり、アプリケーション全体で明確な責務 (Responsibility)を持つドメイン領域をカプセル化したものです。
例:課金サブシステム、在庫管理サブシステム ドメイン・クラス
SimpleModelingではドメイン・モデルの構成要素となる主なクラスとして以下のものを用意しています。
-
ドメイン・エンティティ
-
ドメイン・バリュー
-
ドメイン・ルール
-
ドメイン・サービス
ドメイン・エンティティ
ドメイン・エンティティはドメイン・モデルを構成するエンティティ・オブジェクト (entity object)です。
データベースなどに記録され、ソフトウェアの開始終了のライフサイクル (Lifecycle)を超えて永続的に存在し続けるオブジェクト (Object)です。
SimpleModelingではドメイン・エンティティは以下の4種類に分類されます。
-
ドメイン・リソース
-
ドメイン・タスク
-
ドメイン・アクター
-
ドメイン・ロール
ドメイン・リソース
ドメイン・リソースはソフトウェアの動作に必要な「資源」に関する情報を表すエンティティ・オブジェクトです。
- 性質
-
静的(マスターデータ)
- 生成タイミング
-
システム運用前または安定時に登録
- 主な目的
-
情報の定義・参照
- 永続性
-
長期間参照され、頻繁には変更されない
- 状態遷移
-
通常運用中での状態遷移はもたない
- 関係性
-
他のエンティティに参照される(参照される側)
- 削除・変更
-
滅多に削除されず、変更も限定的(履歴保持が前提)
- アプリケーションUI
-
参照や選択のUIが必要
- 代表例
-
顧客、商品、倉庫、部署など
ドメイン・タスク
ドメイン・タスクはソフトウェアの動作中の「動作」に関する情報を表すエンティティ・オブジェクトです。
- 性質
-
動的(トランザクションデータ)
- 生成タイミング
-
業務処理中に逐次生成される
- 主な目的
-
業務の実行・記録
- 永続性
-
永続化 (Persistence)されるが、完了後は基本的に不変
- 状態遷移
-
明確な状態遷移を持つ(例:草稿→確定→完了)
- 関係性
-
他のエンティティを参照する(リソースを使う)
- 削除・変更
-
完了後は基本的に変更しない(監査目的)
- アプリケーションUI
-
作成・編集・処理・状態遷移のUIが必要
- 代表例
-
受注、支払、休暇申請、問合せ、承認依頼など
ドメイン・バリュー
ドメイン・バリューは識別子 (Identifier)を持たず、値としてのみ意味を持つ不変オブジェクトです。
例:金額(Money)、住所(Address)
ドメイン・イベント
ドメイン・イベント (Domain Event, ドメインイベント)は、ドメイン内で発生するイベントをモデル化したものです。
業務上の状態変化を記録し、通知やイベントソーシングなどにも活用します。
例:注文確定(OrderConfirmed)、在庫変動(InventoryChanged)
ドメイン・ルール
ドメイン・ルールは、ドメイン内で使用されるルールを集めたオブジェクトです。
業務ロジックや制約条件など、ドメインにおける規則や判断基準を表現します。
ドメイン・サービス
オブジェクトに帰属しない手続的な業務ロジックを表現します。
サブシステム/コンポーネント外部に公開する処理や、複数のドメイン・オブジェクト (Domain Object)を横断的に扱う処理に適用されます。
例:請求書の発行、決済処理、在庫の一括調整
ドメイン・オブジェクト
ドメイン・オブジェクトという用語は狭義にはドメイン・クラスのインスタンス (Instance)を指しますが、SimpleModelingでは広義の意味として、ドメイン・モデルを構成する分類子全般を定義とインスタンスを含めてドメイン・オブジェクトと呼ぶことにします。
具体的には本記事で説明した以下の分類子が該当します。
状態機械
状態機械 (StateMachine)は、ドメイン・オブジェクトのライフサイクルにおける状態変化や制御ルールを定義する仕組みです。
特にドメイン・タスクなどのエンティティは、明確な状態遷移を持ち、業務の進行状況を状態 (State)として管理します。
状態機械は分類子ではありませんが、ドメイン・モデルの振る舞い (Behavior)を明示的に表現するための重要な要素です。
参照
用語集
- ドメイン・モデル (Domain Model)
-
Undefined
- シンプルモデリング (SimpleModeling)
-
SimpleModelingは、KnowledgeからDomain Modelを構成し、CMLで形式化し、CozyとAIによって実行可能ソフトウェアへ実現し、Textus上で動作させる、モデリング中心のソフトウェア開発方法論と技術体系です。
- データ型 (Data Type)
-
UMLにおけるData Typeは、InstanceがIdentityではなく値によって識別されるClassifierです。Data TypeのInstanceは、同じ値を持つ場合に区別されません。
- パワータイプ (Powertype)
-
Undefined
- イベント (Event)
-
UMLにおけるEventは、Behaviorの実行中に発生し得る出来事を記述するものです。EventのOccurrenceを受け取ることで、StateMachineのTransitionなどのBehaviorが起動されます。
- コンポーネント (Component)
-
責務・契約・依存関係を明示的に定義し、再利用可能で交換可能な単位としてカプセル化されたソフトウェア構成要素。論理モデルでは抽象構造単位として、物理モデルでは実装・デプロイメント単位として扱われる。
- モデル (Model)
-
Modelとは、対象を特定のPurposeとConcernに基づいて選択し、理解、判断、検証、構築に利用できる形で表した抽象です。対象そのものではなく、目的に必要な要素、関係、意味を保持する表現です。
- UML (Unified Modeling Language)
-
オブジェクト指向分析・設計のための統一モデリング言語。クラス図、シーケンス図、ユースケース図などを通じてシステム構造と動作を表現する。UPおよびCBDの基盤言語。
- 分類子 (Classifier)
-
Undefined
- クラス (Class)
-
Undefined
- ドメイン・モデリング (Domain Modeling)
-
Undefined
- 型 (Type)
-
Undefined
- 制約 (Constraint)
-
UMLにおけるConstraintは、一つ以上のModel ElementのSemanticsの一部を宣言するため、自然言語または機械可読言語で表した条件または制限です。評価結果はBooleanであり、評価は副作用を持ちません。
- 責務 (Responsibility)
-
Responsibilityとは、ObjectまたはRoleが、何を知り、判断し、行い、守るべきかを表す義務です。構造上の情報だけでなく、規則とBehaviorの所有を定めます。
- エンティティ・オブジェクト (entity object)
-
エンティティ・オブジェクトは、ドメイン・モデルにおいて一意の識別子(ID)を持ち、ライフサイクルを通じて継続的に識別・追跡されるオブジェクトです。 エンティティは変更可能であり、同じIDを持つ限り状態が変わっても同一のオブジェクトとして扱われます。
- ライフサイクル (Lifecycle)
-
Lifecycleとは、ある対象が生成されてから終了するまでに、Identityを保ちながら通過するStateとTransitionの範囲です。
- オブジェクト (Object)
-
Objectとは、Classまたは他のClassifierによって分類され、構造、State、Behaviorを持ち得るInstanceです。Objectは、同じClassifierの他のInstanceと区別して参照できる個体として扱われます。
- 永続化 (Persistence)
-
Undefined
- 識別子 (Identifier)
-
Identifierとは、Identityを持つ対象または相関対象を参照し、他の対象から区別するために使用する値です。IdentifierはIdentityを表現できますが、対象が時間を通じて同じ対象であるというIdentityの意味そのものではありません。
- ドメイン・イベント (Domain Event, ドメインイベント)
-
Domain Eventは、Observation(観測記録)の中でドメインに意味を持ち、対応する振る舞いや処理を引き起こすものを表します。 ドメイン・イベントはシステムや業務上の状態変化を明確にモデル化し、アプリケーション層や他システムとの連携を駆動します。
- ドメイン・オブジェクト (Domain Object)
-
ドメイン・オブジェクトとは、ソフトウェアシステムが対象とする現実世界の領域(ドメイン)を表現するためのオブジェクトであり、ビジネスロジックや概念的構造を内包します。 これは、エンティティ、バリュー・オブジェクト、サービス、ルール、イベントなどの要素を含む、ドメイン・モデルを構成する中核的な構造です。 ドメイン・オブジェクトは、システム内でのデータ構造や処理の単なる表現ではなく、問題領域の意味や振る舞いを反映するモデルの一部です。
- インスタンス (Instance)
-
Instanceとは、Classifierによって分類される具体的な存在です。UMLのInstanceSpecificationは、モデル化されたシステム内のInstanceを表現するModel Elementであり、Instanceそのものとそのモデル上の表現を区別します。
- 状態機械 (StateMachine)
-
UMLにおけるStateMachineは、Eventの発生によって起動されるTransitionでStateのグラフをたどり、システム要素のevent-driven Behaviorを表すBehaviorです。
- 状態 (State)
-
UMLにおけるStateは、ある不変条件が成立している状況をモデル化したものです。Objectの現在のStateによって、受け付けられるEventやOperation、成立するConstraint、次に可能なTransitionが変わります。
- 振る舞い (Behavior)
-
UMLにおけるBehaviorは、そのContextとなるBehaviored Classifierが時間とともにどのようにStateを変えるかを定める仕様です。可能な実行、創発する振る舞い、または特定の実行例を表せます。