設計/ドメイン設計(4)
2023年8⽉18⽇
浅海智晴
クラウドアプリケーションのための
オブジェクト指向分析設計講座
第26回
作業分野
SimpleModeling2021
• オブジェクト指向分析設計での共通範囲
• UML/UP
• 本講座で使⽤するUMLプロファイル
• プロファイル:SimpleModeling2021 (SM2021)
• オブジェクト指向分析設計の基本からの拡張部を明確化
• アジャイル開発
• Communication
• Embrace Change
• Travel Light
• Scaling
• Component-Based Development
• クラウド・アプリケーション
• モデル駆動開発
SM2021
Travel Light
Embrace Change
Cloud
Model-Driven
Scaling
CBD
第1部 基本編の構成(1)
• 概論 [第1回]
• 開発プロセス [第2回]
• 基本モデル [第3回]
• 静的モデル(1) [第4回]
• 静的モデル(2) [第5回]
• 動的モデル [第6回]
• 協調モデル [第7回]
• 関数モデル [第8回]
• 物理モデル [第9回]
• 作業分野 [第10回]
• ビジネス・モデリング [第11回]
• 要求 [第12回]
• 要求/ユースケース [第13回]
• 要求/シナリオ [第14回]
• 分析 [第15回]
• 分析/コンポーネント分析 [第16回]
• 分析/イベント駆動 [第17回]
• 作業分野
• 設計 [第18回]
• 設計/アーキテクチャ設計 [第19回]
• 設計/コンポーネント設計(1) [第20回]
• 設計/コンポーネント設計(2) [第21回]
• 設計/コンポーネント設計(3) [第22回]
• 設計/ドメイン設計(1) [第23回]
• 設計/ドメイン設計(2) [第24回]
• 設計/ドメイン設計(3) [第25回]
• 設計/ドメイン設計(4) [第26回]
• 設計/ UX/UI設計 [第27回]
• 実装 [第28回]
• テスト [第29回]
第1部 基本編の構成(2)
• アプリケーション・アーキテクチャ [第30回]
• ドメイン・モデル [第31回]
• アプリケーション・モデル [第32回]
• プレゼンテーション・モデル [第33回]
• ケーススタディ[第34回]
• 要求モデル [第35回]
• 分析モデル [第36回]
• 設計モデル [第37回]
• 実装 [第38回]
• テスト [第39回]
本講座のアプローチ
• オブジェクト指向分析設計の基本を確認
• UML + UP(Unified Process)
• CBD (Component-Based Development)
• 最新技術でアップデート
• クラウド・コンピューティング
• イベント駆動、分散・並列
• ビッグデータ、AI、IoT
• コンテナ
• 関数型
• OFP(Object-Functional Programming), Reactive Streams
• ルール, AI
• DevOps
• アジャイル開発
• DX (Digital Transformation)
第25回 アプリケーション・アーキテクチャ
第2回 開発プロセス
第9回 物理モデル
第11回 ビジネス・モデリング
第2部 クラウド・アプリケーション編
第21回 設計/ドメイン設計
第20回 設計/コンポーネント設計
第2部 クラウド・アプリケーション編
原理 (Principle)
• Agile Software Development [ASD]
• SRP (The Single Responsibility Principle)
• OCP (The Open-Close Principle)
• LSP (The Liskov Substitution Principle)
• …
• GRASP (General Responsibility Assignment Software Patterns or Principals)
• Low Coupling
• High Cohesion
• …
• Writing Effective Use Cases [WEUC]
• Scope
• …
パターン (Pattern)
• Design Patterns [DP]
• Observer, Strategy, …
• Domain Driven Design [DDD]
• Ubiquitous Language, Intention-
Revealing Interfaces, …
• Analysis Patterns [AP]
• Party, Quantity, …
• Pattern-Oriented Software
Architecture [POSA]
• Layers, Pipes and Filters, …
• Patterns of Enterprise
Application Architecture [PEAA]
• Unit of Work, Data Transfer Object,
…
• Enterprise Integration Patterns
[EIP]
• Message Bus, Aggregator, …
• Patterns for Effective Use
Cases [PEUC]
• CompleteSingleGoal,
VerbPhraseName, …
• AntiPatterns [AnP]
• Stovepipe System, Analysis
Paralysis, …
内容
• ドメイン・エンティティ設計
• 関係
• ドメイン・バリュー設計
ドメイン・エンティティ設計
ドメイン・エンティティ設計
• ドメイン設計
• ドメイン・オブジェクト設計
• ドメイン・エンティティ設計
• ドメイン・バリュー設計
• ドメイン・コンポーネント設計
第23回 設計/ドメイン設計 (1)
第23回 設計/ドメイン設計 (1)
第24回 設計/ドメイン設計 (2)
ドメイン・オブジェクトの種類
• エンティティ
• ドメイン・モデルを記述する永続オブジェクト
• バリュー
• 値を表すオブジェクト
• 複合データ型の実現
• DTOの実現
• サービス
• エンティティを操作するロジックを提供
• ルール
• ドメイン・モデルの操作に使⽤するルール
• Declarative Style [DDD]
• イベント
• ドメイン・モデル内で発⽣するイベント
再掲 第24回 設計/ドメイン設計 (2)
エンティティの種類
• Actor
• アクター
• Role
• アクターのロール
• Task
• リソースを操作するタスク
• Event
• ドメイン・イベントの中でエンティティとして永続化するもの
• Resource
• リソース
• Rule
• ドメイン・ルールの中でエンティティとして永続化するもの
• Summary [追加]
• 派⽣情報を記述
SM2021
再掲 第24回 設計/ドメイン設計 (2)
エンティティの分類軸
• 「モノ」⇔「コト」
• マスター・データ⇔トランザクション・データ
• 知識(Knowledge)⇔操作(Operational)
• 内部⇔外部
• 参照更新(Read/Write)⇔ほぼ参照(Read-Mostly)⇔参照 (Read-Only)
「モノ」⇔「コト」
• モノ・コト分析
• モノ
• 存在するもの。静的。
• コト
• 時間の経過とともに発⽣する事象。動的。
• ビジネス分析など⾊々な場所で⽤いられている
• オブジェクト指向モデリングの補助線に「モノ」と「コト」を
導⼊すると効果的
マスター・データ⇔トランザクション・
データ
• 伝統的なデータの分類
• マスター・データ
• アプリケーションのベースとなるデータ。
• 運⽤前に移⼊し設置する。
• 運⽤中に⼤幅な更新は⾏わない。
• ⻑期間使⽤される。
• トランザクション・データ
• アプリケーションの動作中に逐次作成されるデータ。
• 運⽤中に作成・更新される。
• 該当処理中に使⽤され、該当処理が終了した後は参照されない。
知識(Knowledge)⇔操作(Operational)
• Knowledge Level [AP]
• Knowledge Level [DDD]
• 知識レベル (Knowledge Level)
• 操作レベルの動作を規定するメタレベルの構造を記述するエンティ
ティ
• Ruleエンティティ
• 操作レベル (Operational Level)
• 通常の操作実現のためのエンティティ
Partyパターン/Accountabilityパターン 再掲 第24回 設計/ドメイン設計 (2)
Knowledge Levelとドメイン・ルール 再掲 第24回 設計/ドメイン設計 (2)
内部⇔外部
• 内部オブジェクト
• システム内に存在するオブジェクト
• 外部オブジェクト
• システム外に存在するオブジェクト
• システム内に代理オブジェクトを置く⇒アクター
参照更新(Read/Write)⇔ほぼ参照(Read-Mostly)
⇔参照 (Read-Only)
• オブジェクトの更新頻度による分類
• 参照更新 (Read/Write)
• 更新が頻繁に⾏なわれる
• ほぼ参照 (Read-Mostly)
• まれに更新が⾏われるがほぼ参照のみ
• 参照 (Read-Only)
• 作成後は参照のみ
• 不変オブジェクト (Immutable Object)
• 性能向上のためには”参照 > ほぼ参照 > 参照更新”の順に望ま
しい
性能特性
• 参照性能の要因
• キャッシュ
• できるだけ⻑くしたい
• RDBのインデックスの本数
• 増やすと性能向上する検索のパ
ターンが増える
• 増やしたい
• 更新性能の要因
• ⾮同期更新の可否
• 体感性能が向上
• RDBのインデックスの本数
• 増やすと更新性能が下がる
• 減らしたい
• 参照更新(Read/Write)
• キャッシュ時間:短
• RDBインデックス
• 本数を増やすと更新性能:短
• ほぼ参照(Read-Mostly)
• キャッシュ時間:⻑
• RDBインデックス
• 本数を増やしても運⽤に影響⼩
• 参照(Read-Only)
• キャッシュ時間:⻑+
• RDBインデックス
• 本数を増やしても運⽤に影響⼩+
Resource
• リソースを記述するエンティティ
• 性質
• 「モノ」⇔「コト」
• マスター・データ⇔トランザクション・データ
• 知識(Knowledge)⇔操作(Operational)
• 内部⇔外部
• 参照更新(Read/Write)⇔ほぼ参照(Read-Mostly)⇔参照(Read-Only)
• 例
• 商品、会議室
Task
• 責務を達成するための処理の実⾏を⽰すエンティティ
• 性質
• 「モノ」⇔「コト」
• マスター・データ⇔トランザクション・データ
• 知識(Knowledge)⇔操作(Operational)
• 内部⇔外部
• 参照更新(Read/Write)⇔ほぼ参照(Read-Mostly)⇔参照(Read-Only)
• 例
• 購⼊、予約
Actor
• アクターを記述するエンティティ
• 外部オブジェクトの代理オブジェクト
• 性質
• 「モノ」⇔「コト」
• マスター・データ⇔トランザクション・データ
• 知識(Knowledge)⇔操作(Operational)
• 内部⇔外部
• 参照更新(Read/Write)⇔ほぼ参照(Read-Mostly)⇔参照(Read-Only)
• 例
• 利⽤者、顧客、管理者
• 外部サービス
Event
• イベントの発⽣を⽰すエンティティ
• 性質
• 「モノ」⇔「コト」
• マスター・データ⇔トランザクション・データ
• 知識(Knowledge)⇔操作(Operational)
• 内部⇔外部
• 参照更新(Read/Write)⇔ほぼ参照(Read-Mostly)⇔参照(Read-Only)
• 例
• 購⼊イベント、予約イベント
Rule
• ルールを記述するエンティティ
• 性質
• 「モノ」⇔「コト」
• マスター・データ⇔トランザクション・データ
• 知識(Knowledge)⇔操作(Operational)
• 内部⇔外部
• 参照更新(Read/Write)⇔ほぼ参照(Read-Mostly)⇔参照(Read-Only)
• 例
• 価格計算ルール
Summary
• 他のエンティティからの派⽣情報を記述
• RDB View
• バックグラウンドで集計
• 性質
• 「モノ」⇔「コト」
• マスター・データ⇔トランザクション・データ
• 知識(Knowledge)⇔操作(Operational)
• 内部⇔外部
• 参照更新(Read/Write)⇔ほぼ参照(Read-Mostly)⇔参照(Read-Only)
• 例
• 利⽤状況、購⼊状況
シナリオとロバストネス図 再掲 第15回 分析
ドメイン・エンティティとシナリオ
補助的に⽤いるエンティティ
• Role
• ユースケース・タスク・関連に参加する際のロール
• ロール毎に属性などを管理する際に使⽤する
• 例:販売アプリAのポイント
• Item
• エンティティのWhole-Part [POSA]の構造を構築
• 関連クラス的⽤法
• 例:購⼊の複数の商品に対する関連クラス(個数、価格)
• State
• Resourceなどの状態を個別に管理
• アプリケーション・ユースケース・タスク毎に必要な状態が違う場合
• Resourceをほぼ参照(Read-Mostly)に保つことで性能向上を図る
モノ・コトとドメイン・エンティティ
関係
第13回 分析モデル
第12回 要求モデル
第11回 ビジネス・モデリング
再掲 第4回 静的モデル(1)
関連 (association)
再掲 第4回 静的モデル(1)
汎化 (Generalization)
• より汎⽤的な要素とより特化的な要素
の間の分類関係。
• “継承”を実現。
• OCP: Open-Closed Principle
SM2021
SM2021
第13回 分析モデル
第14回 設計モデル
再掲 第4回 静的モデル(1)
多重継承問題
• DAG問題:共通の親クラスの扱いが難しい
• 以下のモデル要素を使い分ける
• インタフェース
• トレイト
• パワータイプ
• 型クラス
• ドメイン・モデル
• 概念レベルの段階からこの問題に対応しておくのがよい
第13回 分析モデル
第14回 設計モデル
第11回 ビジネス・モデリング
第12回 要求モデル
第18回 ドメイン・モデル
再掲 第4回 静的モデル(1)
依存性 (dependency)
関連と汎化以外の関係を記述
再掲 第4回 静的モデル(1)
ドメイン・バリュー設計
ドメイン・バリュー設計
• ⽤途
• DTO (Data Transfer Object)
• データ型 (プリミティブ型、構造型)
• ユニバース (Universe)
• 性質
• 値による同定⽐較 (IDによる同定⽐較)
• 技術
• 不変オブジェクト
• 代数的データ型
第4回 静的モデル(1)
ユニバース (Universe)
• 操作(Operation)に渡す環境情報
• 操作に必要なエンティティの必要な部分の断⽚を切り出したもの
• 関連パターン
• Aggregate [DDD]
• Whole-Part [POSA]
• Aggregation/Composition [UML]
• ワーキング・セット (Working Set)
• OS(仮想記憶)の概念
• プロセスの動作に必要な情報を選択してメモリに載せる
• ユースケース/タスクを実⾏するために、メモリ上に載っていなけれ
ばならないエンティティ由来のオブジェクトの総体
SM2021
エンティティ・オブジェクト
バリュー・オブジェクトによる表現
メモリ上のエンティティ・オブジェクトを共有
再掲 第23回 ドメイン設計(1)
?
伝票指向アーキテクチャ
再掲 第423回 ドメイン設計(1)
伝票指向アーキテクチャとドメイン・バリュー
まとめ
• ドメイン・エンティティ設計
• エンティティの種類と性質
• Actor, Role, Task, Event, Resource, Rule Summary
• ドメイン・バリュー設計
• DTO
• データ型
• ユニバース
参考⽂献
• The Unified Modeling Language Reference Manual,
2nd (Rumbaugh他, 2004)
• The Unified Modeling Language User Guide, 2nd
(Booch他, 2004)
• The Unified Software Development Process
(Jacobson他, 1999)
• The Object Constraint Language, 2nd (Warmer他,
2003)
• UML 2 and the Unified Process: Practical Object-
Oriented Analysis and Design (Arlow他, 2005)
• OMG Unified Modeling Language Version 2.5
(OMG, 2015)
• 上流⼯程UMLモデリング (浅海, 2008)
• Domain-Driven Design: Tracking Complexity in
the Heart of Software (Evans, 2003)
• Applying Domain-Driven Design and Patterns :
With Examples in C# and .NET. (Nilsson, 2006)
• Analysis Patterns: Reusable Object Models (Fowler,
1996)
• Enterprise Patterns and MDA : Building Better
Software with Archetype Patterns and UML (Arlow
他, 2004)
• Patterns of Enterprise Application Architecture
(Fowler他, 2002)
• Design Patterns : Elements of Reusable Object-
Oriented Software (Gamma他, 1995)
• Functional and Reactive Domain Modeling (Ghosh,
2016)
• Functional Programming in Scala (Chiusano他,
2014)

設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】