More Related Content Similar to 設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】 (20) More from Tomoharu ASAMI (6) 設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】2. 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
3. 第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回]
• 設計/ドメイン設計 [第23回]
• 設計/ UX/UI設計 [第24回]
• 実装 [第25回]
• テスト [第26回]
• アプリケーション・アーキテクチャ [第27回]
• ドメイン・モデル [第28回]
• アプリケーション・モデル [第29回]
• プレゼンテーション・モデル [第30回]
• ケーススタディ[第31回]
• 要求モデル [第32回]
• 分析モデル [第33回]
• 設計モデル [第34回]
• 実装 [第35回]
• テスト [第36回]
4. 本講座のアプローチ
• オブジェクト指向分析設計の基本を確認
• 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部 クラウド・アプリケーション編
5. 本講座の選択
• プログラミング⾔語
• Scala
• Javaエコシステム
• Pythonを併⽤
• コンテナ
• Docker/Kubernetes
• CI/CD
• Daggar
• ミドルウェア
• AWS
• クラウド・プラットフォーム
• AWS
• アプリケーション・フレームワーク
• 本講座が定義する仮想的なアプリケーション・フレームワーク
• コンポーネント・フレームワーク
• クラウド・アプリケーション
• 関数型
6. 原理 (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
• …
7. パターン (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, …
10. 制約 (Constraint)
• テキストで表された⾃然⾔語または特定のフォーマル⾔語による意味的な
条件または制限
• OCL (Object Constraint Language)
• オブジェクト制約記述⾔語
• ⼀種の関数型⾔語
• 契約による設計 (Design by Contract)
• 不変条件 (invariant) : オブジェクトで常に真となる条件
• 事前条件 (pre-condition) : オペレーションの実⾏の前提となる条件
• 事後条件 (post-condition) : オペレーションの実⾏完了の前提となる条件
• 制約を重視する理由
• 散逸しがちな要件を確実に記録して実装につなげる
• 要件と実装の距離が短い分野なので効果抜群
• できるだけ上流のモデルで実装に直結する精度の仕様を確⽴しておきたい
再掲 第5回 静的モデル(2)
12. 制約の使い所
• データ型/値域
• データ型の不変表明として定義
• 画⾯⼊⼒、データ移⼊のパラメタ/データ検証
• 画⾯⼊⼒の⼊⼒補助
• クラス/不変表明
• バグの検出に有効
• オペレーション/事前条件
• 画⾯⼊⼒、データ移⼊のパラメタ/データ検証
• 画⾯⼊⼒の⼊⼒補助
• オペレーション/事後条件
• バグの検出に有効
• データ破壊を未然に防ぐ効果
• データ移⼊・移出
• 異常データのチェック・クレンジング
再掲 第5回 静的モデル(2)
コンポーネント仕様では、できるだけ制約
を⽤いて仕様を精密に定義したい
コンポーネント実現では、必要に応じて
適材適所で使うとよい
Travel Light
14. イベント (Event)
• 4種類のイベント
• CallEvent
• オペレーションが呼び出された時に発⽣するイベント
• SignalEvent
• シグナルを受信した時に発⽣するイベント
• TimeEvent
• 指定した時間に発⽣するイベント
• after : ⼀定時間後
• when : 指定時間
• ChangeEvent
• 指定した条件式が真になった時に発⽣するイベント
• プロパティの変更時など
• UMLではオブジェクトがシグナルなどの刺激を受けたことを通知す
るモデル要素としてイベントを定義している
再掲 第6回 動的モデル
16. DTO (Data Transfer Object) [PEAA]
• コンポーネントのインタフェースのオペレーションの引数と復
帰値ではDTOを⽤いるのがお勧め
• Value Object [DDD]
• 値として振る舞うオブジェクト
• 同定⽐較は参照ではなく値で⾏う
• ネットワーク経由での送付、バイナリ・データとしての格納が可能
• JSONでの整列化
• ADT (Algebraic Data Type)
• 代数的データ型
• 関数型で使⽤する論理積、論理和をサポートしたデータ型
• 可能であればADTにした⽅が関数型プログラミングと相性がよい
22. コンポーネント仕様 (Component Specification)
• インタフェース
• 提供インタフェース (Provided Interface)
• 要求インタフェース (Required Interface)
• レセプション
• イベント
• ⽣成
• ファクトリ
• DI (Dependency Injection)
• 拡張点
• 変化点
• メトリックス (Metrics)
• データ分析
24. テスト容易性 (Testability)
• コンポーネントのテストのしやすさ
• 他のコンポーネントとの依存性をできるだけ排除する
• インタフェース(提供、要求)を通してアクセス
• コンポーネントの作成はDI(Dependency Injection)を可能にす
る
• クライアントの実⾏⽂脈は実⾏コンテキスト経由で取得するよ
うにする
• 認証情報、時間
• コンポーネントの内部情報がテスト・プログラムから取得でき
るようにする
27. インタフェース設計
• インタフェースの種類
• 提供インタフェース(provided interface)
• 要求インタフェース (required interface)
• 契約による設計 (Design by Contract)
• 事前条件、事後条件、不変条件を使ってオペレーションの仕様をより
精密に記述する
• ISP (The Interface Segregation Principle)
• いろいろな⽤途に使える巨⼤インタフェースではなく、⽬的ごとに定
義したインタフェースを複数⽤意する
35. 契約による設計 (DbC: Design by Contract)
• Scala/Javaではオペレーションに対する制約で実現
• 不変条件 (invariant) : オブジェクトで常に真となる条件
• 事前条件 (pre-condition) : オペレーションの実⾏の前提となる条件
• 事後条件 (post-condition) : オペレーションの実⾏完了の前提となる条
件
• 仕様を明⽰する
• 実⾏時にエラーチェックが⾏われる
• 型のエラー・チェックはコンパイル時
38. 実⾏コンテキスト
• 主な管理対象
• ユーザー認証
• トランザクション
• 国際化
• 表⽰フォーマット (⽇時、通貨、数値など)
• できるだけ実⾏コンテキストを使⽤しないオペレーションが望
ましい
• RPCでは実⾏コンテキストの移送が必要
• コンポーネント・フレームワークでのサポートが必要
39. オペレーションの特性
• Accessor : 参照のみ
• Function : (純粋関数型⾔語の)関数の性質を満たす
• Mutator : 更新
• Idempotent : 冪等性
• 冪等性
• 何度呼び出してもオブジェクト側の状態は同じものになる
• RPCと相性がよい(何度リトライしても同じ結果が得られる)
• できるだけ:
• Function > Accessor > Idempotent > Mutator
40. RPC (Remote Procedure Call)
• オペレーションをネットワーク経由で呼び指す可能性があるのでRPC
向きの仕様にしておくことが望ましい
• 引数にはDTOを⽤いる
• RPC機能は送受信とも、コンポーネント・フレームワークの機能を⽤
いる
• 実⾏コンテキストが引数にある場合は、コンポーネント・フレーム
ワークの機能を⽤いて移送する必要がある
41. ⾮同期
• ⾮同期のメカニズム
• Future
• クライアント側で処理を多重化できる
• ジョブ
• ジョブ管理で⾮同期実⾏
• オペレーションの反応時間を改善
• バッチ
• 定時に⼀括実⾏
• データを蓄積した⼤規模データの扱いに適している
• ジョブとバッチはコンポーネント・フレームワークの機能を利
⽤
50. 拡張点 (extension point)
• 要求インタフェースを使⽤して、後付で機能拡張を可能にする
• 部品化による再利⽤には重要な機能
• 拡張点の実現⽅法
• コンストラクタでパラメタとして受け取る
• DIで注⼊
• 外部リソース(環境変数、ファイル、DB)の情報から設定
• 拡張点にOSGiを採⽤することでライブラリ・バージョン衝突
問題(ライブラリ・ヘル)を解決できる
52. 変化点 (variation point)
• 各種デフォルト値や処理ロジックの選択などを起動時の外部パ
ラメタで与える
• 部品化による再利⽤には重要な機能
• 変化点の実現⽅法
• コンストラクタでパラメタとして受け取る
• DIで注⼊
• 外部リソース(環境変数、ファイル、DB)の情報から設定
59. まとめ
• コンポーネント仕様の⽅針
• 疎結合、⾼凝集 ( Low
Coupling, High Cohesion
[GRASP])
• 部品としての再利⽤性を⾼める
• テスト容易性 (Testability)に配
慮する
• 保守性 (Serviceability)に配慮
する
• コンポーネント仕様
• インタフェース
• オペレーション
• レセプション
• ⽣成
• 拡張点、変化点
• メトリクス
• データ分析
• 物理モデル
60. 参考⽂献
• 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)