Mais conteúdo relacionado
Semelhante a 実践に向けたドメイン駆動設計のエッセンス (20)
実践に向けたドメイン駆動設計のエッセンス
- 9. 今日の旅行日程
• 「まえがき」 から出発 中核の概念
• 第1部の導入 基本用語の説明
– モデル/ドメイン
• 「結論」に飛んで、どこを目指しているかを見学
• 「まえがき」に戻って、前提と方向性の確認
– 複雑さという課題
– 設計対開発プロセス
– 本書の構成
– 本書が対象とする読者/ドメイン駆動チーム
• 第1部の導入から、3つの基本活動を理解する
– 知識をかみ砕く/言葉を使う/モデルと実装を結びつける
• チームのドメイン駆動設計力を高める体験型の学習
• 総合演習とその実践 モデルの成長のさせ方
※ 2部、3部、4部は、「本書の構成」と「体験型学習」で触れます
- 44. XP
• 設計重視
– 毎日、設計に投資する
– 動いたあとも設計の改善に投資する(リファク
タリング)
• 費用対効果
– 未経験での設計より、経験や事実に基づく設
計のほうが費用対効果が大きい
– up front 設計が投資効果がある時はやる
べき
– ドキュメントが投資効果がある時は作るべき
- 45. 「本書の構成」
• 第1部 ドメインモデルを機能させる
– ドメイン駆動設計の基本的な目標
• 第2部 モデル駆動設計の構成要素
– オブジェクト指向ドメインモデリングの基本
• 第3部 より深い洞察に向かうリファクタリング
– 役に立つ実用的なモデルを見つける原則とテク
ニック
• 第4部 戦略的設計
– 第1部で示した目標をより大きな規模で実現する
- 68. 関心事の基本部品
• 5種類の対象
ヒト・モノ・コト 時・場所
– どう 「識別」 しているか
– どう 「説明」 しているか
– どう 「関係」 しているか
• 具体的に例をあげて話あってみる
• 「豊かな」モデル、「深い」モデルへの手掛りを見つ
ける練習
– 5種類の任意の2つの組み合わせ(20パターン)の
「関係」について、具体例をどんどんあげてみる
- 73. 要点を図を使って整理するスキル
• 題材
– 実際の案件
– 7章の貨物輸送システム
• 手法
– リレーションシップ駆動要件定義(RDRA)
– 目的や背景を整理⇒価値モデル(コンテキスト図)
– 「活動」を要約⇒業務モデル(アクティビティ図)
– 「関心事」を要約⇒概念モデル(クラス図)
• 狙い
– チームで、ドメインモデリングの基礎を習得する
- 76. ドメインモデリング演習
• 一枚のメモ書き (システム企画書のドラフト)
• 2時間 さくっとドメインモデリング
– メモを読む
– 目的を要約する ⇒ コンテキスト図を描く
– 利用者の活動を要約する ⇒ アクティビティ図を描く
– 利用者の関心事を要約する ⇒ 概念クラス図を描く
– メモ/コンテキスト図/アクティビティ図/概念クラス図を整合さ
せる
• 2時間 モデルの改良
– お互いのモデルを説明しあう
– 違いを話あう (言葉にする/耳を傾ける/矛盾を見つける)
– 話し合った内容の気づきを、自分のモデルに反映する
- 78. 設計力をあげる
• ドメイン駆動設計に必要な設計力
– 第10章 しやなかな設計
• 意図の明白なインタフェース (手段の隠ぺい)
• 概念の輪郭と一致させる
• 独立性を高める (組み立て型の柔軟性)
• ドメイン駆動設計のいやな臭いと処方箋
• 意図がはっきりしないメソッド/クラス/パッケージ
• 利用する人たちの関心事(概念)と一致しないコード
• 複雑に絡み合ったクラス/パッケージ
- 83. 良い部品
• Value Object
– ドメインに特化したString
• PersonName, MailAddress, Telephone, …
– ドメインに特化したInteger/Decimal
• Money, Quantity, Rate, …
– ドメインに特化したLocalDate
• DueDate, ExpireDate, DateOfBirth
• ファーストクラスコレクション
– 一覧、履歴、グループ
• Products, Members, PurchaseHistory, …
– 利用者の関心事をクラスで明示する
ループ処理の隠ぺい
データ操作の隠ぺい
- 84. 良い部品 (分岐の表現)
• ガード節
– if/else を 早期リターンを使って分解する
– 複文を複数の単文に ⇒ 独立した部品
• 1箇所だけの分岐構造
– 同じ分岐構造を複数個所に書かない
• 多態
– State/Strategy パターンで、分岐ごとのロジックを
別オブジェクトに
– Enum(列挙) で、区分の構造を宣言的に
– Enum(列挙) で、区分に振る舞いを持たせる
- 88. 実装技術
• Spring Boot
– フレームワーク自体が三層+ドメインモデル指向
• @Controller/@Service/@Repository
– サンプルが三層+ドメインモデルになっている
• プレゼンテーション層
– Spring MVC HTTPとドメインモデルの変換技術
– Thymeleaf HTMLを尊重したビュー技術
• データソース層
– myBatis SQLを尊重したオブジェクトマッピング
- 89. 三層+ドメインモデル
設計の改善
• ドメインモデルに、利用者の関心事を集中する
– 豊かなモデル / 深いモデル への道筋
• いやな臭いとリファクタリング
– プレゼンテーション層にまぎれこんだドメインロジック
• 新着アイコンをつけてわかりやすく ⇒ ドメインの関心事
• ビューに if(新着) を書かない工夫
– データソース層やSQLにまぎれこんだドメインロジック
• 動的にSQL組み立てない工夫
– 多態を使った検索の切り替え
• WHERE句やORDER BYの意図をドメインオブジェクトで表現
– SQLに渡すパラメータオブジェクトの設計改善