SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
設計/ドメイン設計(1)
2023年5⽉18⽇
浅海智晴
クラウドアプリケーションのための
オブジェクト指向分析設計講座
第23回
作業分野
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回]
• 開発プロセス [第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回]
• 設計/ UX/UI設計 [第26回]
• 実装 [第27回]
• テスト [第28回]
• アプリケーション・アーキテクチャ [第29回]
• ドメイン・モデル [第30回]
• アプリケーション・モデル [第31回]
• プレゼンテーション・モデル [第32回]
• ケーススタディ[第33回]
• 要求モデル [第34回]
• 分析モデル [第35回]
• 設計モデル [第36回]
• 実装 [第37回]
• テスト [第38回]
本講座のアプローチ
• オブジェクト指向分析設計の基本を確認
• 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部 クラウド・アプリケーション編
本講座の選択
• プログラミング⾔語
• Scala
• Javaエコシステム
• Pythonを併⽤
• コンテナ
• Docker/Kubernetes
• CI/CD
• Daggar
• ミドルウェア
• AWS
• クラウド・プラットフォーム
• AWS
• アプリケーション・フレームワーク
• 本講座が定義する仮想的なアプリケーション・フレームワーク
• コンポーネント・フレームワーク
• クラウド・アプリケーション
• 関数型
原理 (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, …
オブジェクト指向の位置付け 第3回 基本モデル
作業分野とモデルの関係 第10回 作業分野
論理モデルの構成 第3回 基本モデル
内容
• ドメイン・モデル
• ドメイン設計
• 基本技術
• 関数の活⽤
• ドメイン・コンポーネント設計
• 伝票指向アーキテクチャ
ドメイン・モデル
ドメイン・モデル
• 現実世界の構造をソフトウェアで操作可能なモデルとして写し
取ったもの
• 主な構成
• エンティティ
• 永続オブジェクト
• バリュー
• サービス
• ルール
• イベント
現実世界からソフトウェア・モデルへ
現実世界を写し取る
• モノ・コト分析
• ⽤語集
• ユースケース
• 物語
• シナリオ分析
• Ubiquitous Language [DDD]
• エンジニアとビジネス側で共通の⾔語を持つ
三層アーキテクチャ 再掲 第20回 設計/コンポーネント設計(1)
ドメイン・モデルとアプリケーション・モデル
ドメイン設計
ドメイン設計
• ドメイン・モデル設計
• 現実世界の構造をソフトウェアで操作可能なドメイン・モデルとして
写し取る
• 次回予定
• ドメイン・コンポーネント設計
• ドメイン・モデルの操作を実現するメカニズムを設計
• コンポーネントとして実現
第24回 設計/ドメイン設計(2)
ドメイン設計に有効なパターン
• ドメイン・オブジェクト設計
• Analysis Patterns [AP]
• Domain Driven Design [DDD]
• ドメイン・コンポーネント設計
• Domain Driven Design [DDD]
• Patterns of Enterprise Application Architecture [PEAA]
分析オブジェクトのマッピング
基本技術
基本技術
• ドメイン・モデルの実現に限らず、オブジェクト・モデル全般
で有⽤な技術
• コンポーネント
• 物理モデル
• DTO
• 型クラス
• 関数
• Design Patterns [DP]
Supple Design [DDD] (柔軟な設計)
• Intention-Revealing Interfaces [DDD]
• 意図の明確なインタフェース
• Side-Effect Free Functions [DDD]
• 副作⽤なし関数
• Assertions [DDD]
• アサーション
• Standalone Classes [DDD]
• スタンドアロン・クラス
• Conceptual Contours [DDD]
• 概念的輪郭
関数の活⽤
関数の活⽤
• ドメイン・モデルでも関数技術を活⽤したい
• 代数的データ構造
• Monoid
• Monad
• 型クラス
• 計算と状態遷移の分離
• リアクティブ・ストリーム
オブジェクトと関数
再掲 第8回 関数モデル
サービスと関数
再掲 第8回 関数モデル
モナディック・パイプライン
(Monadic Pipeline) 本講座ではモナドを中⼼とした
マイクロ・フレームワークを
モナディック・パイプラインと呼びます。
再掲 第8回 関数モデル
Scala: for comprehension
• モナディック・パイプラインのためのシンタクスシュガー
def func(a: Int): Int =
val r: Option[Int] = for {
b <- f(a)
c <- g(b)
d = h(c)
e <- i(d)
} yield e
r.get
def f(x: Int): Option[Int] = ???
def g(x: Int): Option[Int] = ???
def h(x: Int): Int = ???
def i(x: Int): Option[Int] = ???
flatMapコンビネータ
mapコンビネータ
再掲 第8回 関数モデル
リアクティブ・ストリーム
• The Reactive Manifesto
• Reactive Streams
• ⾮同期ストリーム処理、バック
プレッシャー、ノンブロッキン
グ
• Akka Streams
• Reactive Stream & 関数
• FS2(Functional Stream for
Scala)
• Scalaz-stream
• ZStream
Cloud
再掲 第8回 関数モデル
リアクティブ・ストリームを
ZStream Monadで実現
ストリーミング
並⾏・⾮同期
リソース・セーフ
リジリエント
状態遷移
チャンク化
再掲 第8回 関数モデル
ドメイン・コンポーネント
設計
Domain Driven Design [DDD]
• 中軸
• Ubiquitous Language [DDD]
• Model-Driven Design [DDD]
• Supple Design (柔軟な設計)
• Building Blocks
• Context (⽂脈)
• Distillation (蒸留)
• Large-Scale Structure
Building Blocks [DDD]
• Layered Architecture [DDD]
• Entities [DDD]
• Value Objects [DDD]
• Services [DDD]
• Modules [DDD]
• Aggregates [DDD]
• Factories [DDD]
• Repositories [DDD]
永続オブジェクト
• Repository [PEAA, DDD]
• Identify Field [PEAA]
• Query Object [PEAA]
• Embedded Value [PEAA]
• Serialized LOB [PEAA]
O/Rマッピング
• インピーダンス・ミスマッチ
• インヘリタンスの扱い
• Single Table Inheritance [PEAA]
• Class Table Inheritance [PEAA]
• Concrete Table Inheritance [PEAA]
• 関連の扱い
• Foreign Key Mapping [PEAA]
• Association Table Mapping [PEAA]
• Dependent Mapping [PEAA]
メモリ内オブジェクト管理
• Identity Map [PEAA]
• Lazy Load [PEAA]
• Aggregates [DDD]
• データの⼊出⼒の単位となる
排他制御
• RDBMSのトランザクション管理が基本
• パターン
• Unit Of Work [PEAA]
• Optimistic Offline Lock [PEAA]
• Pessimistic Offline Lock [PEAA]
• Coarse-Grained Lock [PEAA]
• Implicit Lock[PEAA]
イベント駆動
• ドメイン・イベント
• エンティティに状態機械を設定
• 状態機械がドメイン・イベントに反応して処理を進める
第20回 設計/コンポーネント設計(1)
DSL (Domain Specific Language)
• ドメイン特化⾔語
• ドメインに特化して、ドメインの構造を簡潔に分かりやすく記述する
ことができる⾔語
• Declarative Style [DDD]
• 実現⽅式
• プログラミング⾔語組み込み
• Scala
• メタ⾔語 (XML, JSON)の上に構築
• 新規に⾔語を作成
第3部 モデル駆動開発編
Model-Driven
ドメイン・コンポーネントの構造(例)
伝票指向アーキテクチャ
伝票指向アーキテクチャ
• 本講座で推奨するドメイン・モデルを操作するアプリケーショ
ンのアーキテクチャ
• アプリケーション・アーキテクチャを考える際の補助線として
伝票 (Voucher)と台帳 (Ledger)を⽤いる
• クラウド・アプリケーションとの親和性
• CBD (Component-Based Development)
• マイクロ・サービス
• リアクティブ・ストリーム
SM2021
Cloud
CBD
メモリ上のエンティティ・オブジェクトを共有
伝票指向アーキテクチャ
伝票指向アーキテクチャとリアクティブ・ストリーム
まとめ
• ドメイン・モデル
• 現実世界を操作可能なモデルとして引き写す
• ドメイン設計
• ドメイン・モデル設計 → 次回
• ドメイン・コンポーネント設計
• 伝票指向アーキテクチャ
参考⽂献
• 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)

Más contenido relacionado

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

DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
Tomoharu ASAMI
 

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

実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
 
物理モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第9回】
物理モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第9回】物理モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第9回】
物理モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第9回】
 
静的モデル(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第5回】
静的モデル(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第5回】静的モデル(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第5回】
静的モデル(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第5回】
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
 
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
 
作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】
作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】
作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
ビジネス・モデリング 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第11回】
ビジネス・モデリング 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第11回】ビジネス・モデリング 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第11回】
ビジネス・モデリング 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第11回】
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
 
クラウドアプリケーションのための オブジェクト指向分析設計講座 (1)
クラウドアプリケーションのための オブジェクト指向分析設計講座 (1)クラウドアプリケーションのための オブジェクト指向分析設計講座 (1)
クラウドアプリケーションのための オブジェクト指向分析設計講座 (1)
 
協調モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第7回】
協調モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第7回】協調モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第7回】
協調モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第7回】
 
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
 

Más de Tomoharu ASAMI

Más de Tomoharu ASAMI (6)

設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
 
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
要求/シナリオ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第14回】
 
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
動的モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第6回】
動的モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第6回】動的モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第6回】
動的モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第6回】
 
静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】
静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】
静的モデル(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第4回】
 

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