Anúncio
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Similar a ビジネスルールの複雑さに立ち向かう(20)

Anúncio

Mais de 増田 亨(18)

Último(20)

Anúncio

ビジネスルールの複雑さに立ち向かう

  1. ビジネスルールの複雑さに 立ち向かう ギルドワークス 増田 亨 2019.5.11 レガシーをぶっつぶせ! 現場でDDD #genbadeDDD
  2. ドメイン駆動設計でつくる理由 2019/5/11 2 進化と成長を続けるソフトウェアを手に入れる ソフトウェアの変更を楽で安全にする
  3. ソフトウエアが複雑になる理由 ビジネスルール 金額、数量、期日、場所などの計算と判定 ビジネスルールを適用する条件による分岐 顧客区分、商品種別、有効期間、地域区分、金額区分、数量区分、 取引種類、取引状態、支払い方法、支払いタイミング、 割り増し条件、割引条件、キャンセル可能条件、… 2019/5/11 3
  4. ソフトウェアの核心にある複雑さに立ち向かう ビジネスルールの複雑さに立ち向かう 42019/5/11
  5. ビジネスルールに立ち向かう4象限 52019/5/11
  6. 2019/5/11 6 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル ドメインオブジェクトの 設計と実装 ドメインモデルの 全体像/戦略的設計 ビジネスルールの 説明文書/定義文書 ビジネスの 全体像/事業戦略
  7. 2019/5/11 7 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル 値オブジェクト 区分オブジェクト コレクションオブジェクト 料金表 利用案内 売買契約 賃貸契約 雇用契約 業務マニュアル キャンセル規定 責務のレイヤー REA ビジネスパターン 会計基準 競争地位 バリューチェーン バランススコアカード 4C理論 業務知識がわかる本 要件定義入門
  8. 2019/5/11 8 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル ドメインオブジェクトの 設計と実装 ドメインモデルの 全体像/戦略的設計 ビジネスルールの 説明文書/定義文書 ビジネスの 全体像/事業戦略 行ったり来たりする 広げながら掘り下げる
  9. 2019/5/11 9 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル 値オブジェクト 区分オブジェクト コレクションオブジェクト 料金表 利用案内 売買契約 賃貸契約 雇用契約 業務マニュアル キャンセル規定 責務のレイヤー REA ビジネスパターン 簿記・予実管理 競争地位 バリューチェーン バランススコアカード 4C理論 業務知識がわかる本 要件定義入門
  10. ドメインオブジェクトの設計と実装 102019/5/11
  11. ビジネスルールを「型」を使って記述する 2019/5/11 11
  12. ビジネスルールを構成する三つの要素 Fact 事実の表現 ビジネスの状況の記録や通知に使う型 ・ 数値、日付、場所、識別番号、名称、… Rule Factを使った 計算や判定のロジック 計算式 同一性の判定式 大小の比較式 Goal 知りたいこと 計算結果や判定結果を表現する型 ・合計金額、予定日、残数、… ・出荷可否、受付可否、割引種類、… 2019/5/11 12
  13. Fact-Rule-Goalを記述する 設計パターン 値オブジェクト ロジックを持ったenum コレクションのカプセル化 2019/5/11 13
  14. 値オブジェクト 2019/5/11 14
  15. 値オブジェクトとは? • Fact の表現手段 • 数値、時間、場所、識別番号、識別名称、… • ビジネスとして適切な値の範囲を定義する • Rule (計算ロジックや判定ロジック)の置き場所 • Factを使う計算や判定をメソッドとして記述する • Factと持つオブジェクトに、関連するロジックを集める • Goal 知りたいこと(計算結果、判定結果)の表現手段 • 知りたいことを表現した型(値の種類)を設計する • メソッドの返す型として使う 2019/5/11 15
  16. 値オブジェクトのカタログ 単一の値 範囲型(from-to) 範囲型のコレクション 数 値 金額型 Amount, Money 金額範囲 x円以上 y円未満 金額範囲のコレクション 価格帯 数量型 Quantity, NumberOfXxx 数量範囲 m人以上 n人以下 数量範囲のコレクション 数量別割引率 時 間 日付型 DueDate, XxxDate 期間 開始日 - 終了日 期間のコレクション シーズン 時刻型 HourTime, XxxTime 時間 開始時刻 – 終了時刻 時間のコレクション 時間帯 空 間 地点型 Point 接続 Path:出発点 – 到達点 接続のコレクション Route [Path,…] - 地域型 Area, Zone 地域のコレクション 階層、隣接関係、… 2019/5/11 16
  17. 値オブジェクトの効果 • 値オブジェクト=ビジネスに特化した値の種類を明示的に表現 • 動かすだけなら、プログラミング言語が提供する汎用的な型だけでよい • プログラムの表現が、ビジネスルールの記述そのものになる • 値の種類単位で、ビジネスロジックの記述が一か所にまとまる • プログラムのあちこちにビジネスルールの記述が重複しない • ビジネスルールが変わったときのソフトウェアの変更が楽で安全 2019/5/11 17
  18. 値オブジェクトを設計する 計算の意図を、メソッド名とメソッドの返す型で説明する 2019/5/11 18
  19. 計算の種類 説明、メソッド例 結果の型 等値判定 isEqual( other ) , notEqual( other ) boolean / enum 大小判定 greaterThan( other ), lessThan( other ), … boolean / enum 加算・減算 同じ型同士の計算 同じ型 乗算 同じ型同士の乗算は意味がないことが多い 別の数値型 除算 同じ型の除算と、異なる型の除算では、意味が異なる 別の数値型 境界 Max, Min の存在 同じ型(の固定値) 列挙 prev(), next() が可能な集合 (循環が可/不可) 同じ型 文字列表現 値の標準的な文字列表現 toString() 文字列 文字列からの生成 標準的な文字列表現からのオブジェクト生成 parse() 同じ型 計算の候補(単一値) 2019/5/11 19
  20. 計算の種類 説明、メソッド例 結果の型 等値判定 isEqual( other ) , notEqual( other ) boolean / enum 大小判定 greaterThan( other ), lessThan( other ), … boolean / enum 範囲に含まれる contains( element ), encloses( other ) boolean / enum 範囲が重複する isOverlapped(other) boolean / enum 厳密に隣接する isConnectedTo(other) boolean / enum 境界の値 Max, Min , 要素の型 範囲演算 intersect(other), minus(other), add(other) 範囲型 文字列表現 標準的な文字列表現 toString(), show(), describe() 文字列 計算の候補(範囲型 from-to) 2019/5/11 20
  21. 計算の種類(メソッド)の設計原則 ある値について、ビジネスルールに必要な計算は、限定的 • 金額と金額の足し算はある • 金額と金額の掛け算はない ビジネスルールの値の範囲は、限定的 • 境界値がある • 1以上99まで • 現在日以降 90日以内 計算の意図を、メソッド名、メソッドの渡す引数の型、メソッドの返す型 で説明する 2019/5/11 21
  22. 値オブジェクトを使って変更を安全にする 契約による設計 2019/5/11 22
  23. 契約による設計 変更を楽で安全にするための設計技法 assert による表明 型による表明 防御的な検査コードを書かない 事前条件(クラスを使う側の責任:引数の型) 事後条件(計算を提供するクラスの責任:返り値の型) 暗黙のビジネスルールの明文化につながる 値の範囲と計算の種類を限定 → 動作が安定する 2019/5/11 23
  24. enumを使った区分ごとのロジックの整理 2019/5/11 24
  25. 区分ごとのビジネスルールを扱う 区分ごとの条件分岐が複雑さの大きな原因 enumは区分ごとのロジックを整理する強力な手段 enumを使うと区分体系の問題の発見と改善が進む 2019/5/11 25
  26. 区分を列挙しただけのenumを作る 区分ごとの定数をenumのフィールド変数+コンストラクタで表現 区分ごとの計算や判定のロジックをenumのメソッドに移動 コードがゆがむ(フィールド変数やメソッドの一貫性が崩れる) 区分のリファクタリング(区分の分解、再定義) ビジネスルール記述のわかりやすさにブレークスルーが起きる 2019/5/11 26
  27. コレクションのカプセル化 2019/5/11 27
  28. コレクション操作の問題と改善 問題 あちこちにコレクションを操作する類似の記述が分散 バグが紛れ込みやすい(計算の不整合が起きやすい) コレクション操作の手続きは、ビジネスの関心事ではない 改善策 目的別のコレクション型を独自につくる コレクション操作のロジックをそのクラスに集める コレクション操作の詳細を隠蔽する 2019/5/11 28
  29. コレクションのカプセル化の効果 コレクション操作がちらばっていたコードのぐちゃぐちゃ感が消える コレクションに必要な計算を集めると、リファクタリングがやりやすい コレクション操作の整合性と一貫性が向上する コレクション操作という技術手段が隠蔽され クラス名、メソッド名、メソッドの返す型で ビジネスの関心事が前面に登場する 2019/5/11 29
  30. 計算の種類 説明、メソッド例 結果の型 サイズ count() int 要素の検査 contains(要素), isEmpty(), notEmpty() boolean / enum 部分集合 select(条件), reject(条件), コレクション 集約演算 sum(), min(), max(), average(), … 集約結果の型 集合演算 insersect(other), minus(other), add(other) コレクション 変換 unique(), sort(), groupBy() コレクション 要素の取り出し first(), last(), at(index) 要素の型 要素の追加 add(), addAll(), append(), insertAt(), … void 文字列表現 show(), describe() 文字列, 文字列[ ] 計算の候補(コレクション) 2019/5/11 30
  31. ビジネスルールの 説明文書・定義文書 2019/5/11 31
  32. 2019/5/11 32 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル ドメインオブジェクトの 設計と実装 ドメインモデルの 全体像/戦略的設計 ビジネスルールの 説明文書/定義文書 ビジネスの 全体像/事業戦略 行ったり来たりする 広げながら掘り下げる
  33. 2019/5/11 33 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル 値オブジェクト 区分オブジェクト コレクションオブジェクト 料金表 利用案内 売買契約 賃貸契約 雇用契約 業務マニュアル キャンセル規定 責務のレイヤー REA ビジネスパターン 簿記・予実管理 競争地位 バリューチェーン バランススコアカード 4C理論 業務知識がわかる本 要件定義入門
  34. 文書化されたビジネスルール 説明 顧客に向けた取引条件や利用条件の説明 価格表、利用案内、割引、特典、返品・返金、キャンセル、… 契約書 提供の約束、支払いの約束 提供できなかった時の約束、支払いできなかった時の約束 業務マニュアル 販売ポリシー、在庫ポリシー、サービスレベルポリシー、… 役職・権限・承認ルール 簿記・予実管理 売上、費用、利益の目標と実績 管理単位(部門、期間、集計、…) 2019/5/11 34 これらの内容が、ドメインオブジェトの計算ロジック・判定ロジックと連動する
  35. ドメインモデルの 全体像/戦略的設計 2019/5/11 35
  36. 2019/5/11 36 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル ドメインオブジェクトの 設計と実装 ドメインモデルの 全体像/戦略的設計 ビジネスルールの 説明文書/定義文書 ビジネスの 全体像/事業戦略 行ったり来たりする 広げながら掘り下げる
  37. 2019/5/11 37 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル 値オブジェクト 区分オブジェクト コレクションオブジェクト 料金表 利用案内 売買契約 賃貸契約 雇用契約 業務マニュアル キャンセル規定 責務のレイヤー REA ビジネスパターン 業務知識がわかる本 簿記・予実管理 競争地位 バリューチェーン バランススコアカード 4C理論 要件定義入門
  38. 責務のレイヤー 2019/5/11 38 ドメイン駆動設計 第16章 大規模な構造
  39. ビジネスルール全体を俯瞰して整理する ドメインオブジェクトのレイヤー化 ポリシー 事業運営の決め事 ビジネスルールの方針 価格、割引、優遇、拒絶 オーバーブッキング キャンセル 約束 顧客との契約 取引先との契約 見積 予約 注文 運用 ビジネス活動の実態(イベント) ビジネスルールの起動トリガー 出荷、売り上げ 請求、回収 能力 ビジネス運営上の制約条件 在庫 出荷能力 処理能力 2019/5/11 39
  40. REA ビジネスパターン 2019/5/11 40 絶版
  41. 2019/5/11 41 https://tech.nikkeibp.co.jp/it/article/Watcher/20070828/280551/出典:日経XTECH REAとビジネスパターン
  42. 2019/5/11 42 第1章 会社経営 第2章 財務会計 第3章 販売管理 第4章 物流・在庫管理 第5章 生産管理 第6章 人事管理
  43. 2019/5/11 43 第1部 基礎編 なぜモデリングを行なうのか―モデリングの種類と手順 モデルの基本作法―モデリングの記法と読み方 データモデルを補完するモデル―プロセスモデルとUML 第2部 実践編 エンティティの切り出し方―トップダウンモデリング トップダウンでの主キーと主要属性の定義 ネーミング標準とドメイン ボトムアップ分析 1 業務システムの概要とマスタの設計 販売管理システムの全体像 基幹業務システム構築のポイント 部門/社員/商品マスタの設計 ほか) 2 販売システムのDB設計 受注業務のDB設計 出荷/売上業務のDB設計 請求業務のDB設計 ほか) 3 仕入/在庫システムのDB設計 発注/仕入業務のDB設計 入庫/倉庫移動業務のDB設計 在庫管理業務のDB設計 アプローチはデータモデリングだが、 ビジネスルールへの言及が多い ビジネスルール計算ロジックの 入力データと、出力結果データという 見方をすると、 ドメインオブジェクトの設計の役に立つ
  44. 2019/5/11 44 序章 この本を買うべきか 第1章 ベテランSEのノウハウとは何か 第2章 ベテランSEのノウハウを見える化する 第3章 システム化の範囲を選ぶ 第4章 業務の視点でシステム機能を選ぶ 第5章 経営管理の視点(株式上場)でシステム機能を選ぶ 第6章 経営戦略の視点でシステム機能を選ぶ 第7章 企業の業務レベルを考慮する 第8章 企業風土を考慮する 第9章 要件定義の設計手順のまとめ 第10章 ベテランSEのノウハウを使いこなす 資料 業務知識ベース ビジネスルールのドロドロした世界とその戦い方の実践的な指南書 読むのがたいへん (歴史のある基幹システムであればあるあるばかり)
  45. ビジネスの全体像/事業戦略 2019/5/11 45
  46. 2019/5/11 46 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル ドメインオブジェクトの 設計と実装 ドメインモデルの 全体像/戦略的設計 ビジネスルールの 説明文書/定義文書 ビジネスの 全体像/事業戦略 行ったり来たりする 広げながら掘り下げる
  47. 2019/5/11 47 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル 値オブジェクト 区分オブジェクト コレクションオブジェクト 料金表 利用案内 売買契約 賃貸契約 雇用契約 業務マニュアル キャンセル規定 責務のレイヤー REA ビジネスパターン 業務知識がわかる本 簿記・予実管理 競争地位 バリューチェーン バランスト・スコアカード 4C理論 要件定義入門
  48. マーケットでの競争地位 ビジネスルールへの変更要求の違い リーダー 強い競争力 大きな経営資源 他のプレーヤーの強みを消すためのビジネスルール変更が多くなる (そういう意味では後追い型の変更) チャレン ジャー 独自優位性に挑戦 大きな経営資源 仮説検証型、企画型のビジネスルール変更が多くなる 新しい商品、新しい販売方法、新しい特典、… フォロワー 弱い競争力 弱い経営資源 生き残りのための後追い型のビジネスルール変更が多くなる 資源がないので、ルール変更も場当たりや中途半端になりがち ニッチャ 独自性は強い 小さい経営資源 独自性を維持・強化することに集中する ビジネスルールは独自かつ複雑になりがち 選択と集中の意思決定が明確 2019/5/11 48
  49. バリューチェーン 2019/5/11 49 https://bizhint.jp/keyword/126003 出典: BizHint powered by BizReach 業務機能の全体像の定番 マイケルポーター「競争優位の戦略」
  50. バランスト・スコアカード 2019/5/11 50 業績のモニタリング枠組み KPI 測定や分析目的のデータ収集が 要求としてあがってくることが増えた 財務の視点の数値 業務プロセスの視点の数値 顧客の視点の数値 学習と成長の視点の数値 https://vokka.jp/1127 出典: VOKKA [ヴォッカ] バランスト・スコアカード(BSC)の本当の使い方・活用方法
  51. 4C理論 マーケティング活動の枠組み Customer Value 顧客価値 提供商品、提供サービスに関するビジネスルールの変更の可能性 Customer Cost 顧客からみた コスト 価格に関するビジネスルールの変更の可能性 Convenience 顧客の 利便性 提供方法、提供場所、提供タイミングに関するビジネスルール変更の 可能性 Communication 顧客との コミュニケー ション 顧客とのコミュニケーションに関するビジネスルール変更の可能性 2019/5/11 51
  52. ビジネスルールの複雑さに立ち向かう まとめ 2019/5/11 52
  53. 2019/5/11 53 ソフトウェア表現 現実世界 ビジネスルールの 詳細・実体 ビジネスの 俯瞰モデル ドメインオブジェクトの 設計と実装 ドメインモデルの 全体像/戦略的設計 ビジネスルールの 説明文書/定義文書 ビジネスの 全体像/事業戦略 行ったり来たりする 広げながら掘り下げる
Anúncio