Upgrade to Pro — share decks privately, control downloads, hide ads and more …

モデリングの費用対効果

 モデリングの費用対効果

ドメイン駆動設計を現場で実践する中で感じているモデル駆動設計のたいせつさや、モデリングの費用対効果について、まとめてみました。
・ドメイン駆動設計の要点
・なぜドメイン駆動設計か?
・複雑さに立ち向かうためのモデリング
・認知の負荷と、モデリングの効果

増田 亨

May 23, 2022
Tweet

More Decks by 増田 亨

Other Decks in Programming

Transcript

  1. ドメイン駆動設計という開発アプローチ ① 事業活動の複雑さに照準を合わせる設計 ② 変更を楽で安全にするためのモデル駆動設計 ③ 現代的なオブジェクト指向プログラミング ④ XP的な開発の考え方とやり方 2022/5/19

    4 カプセル化と契約プログラミング イミュータブル(変更不可) 控えめなサブタイピング コミュニケーション インクリメンタルな開発 リファクタリング 関心を分離する境界の明示 関心の依存関係の単純化 モデル-設計-実装の整合性維持 開発者が事業活動を理解する 事業活動の構造をコードで表現 ドメインモデルパターン
  2. なぜドメイン駆動設計か? (私への仕事の依頼のパターン) 2022/5/19 6 損保系 基幹システム 通販系 基幹システム 健康管理アプリ サブスク課金向けSaaS

    老舗 通信系サービス(ISP) 運用維持の コスト負担 修正拡張の コスト 変更の スピード 200X年から DOA系独自言語 創業から5年 事業の急拡大 創業から10年 PHPで増改築 200X年から JSP/CORBA/C 200X年から COBOL/汎用機 ???
  3. なぜドメイン駆動設計か? (私への仕事の依頼のパターン) 2022/5/19 7 損保系 基幹システム 通販系 基幹システム 健康管理アプリ サブスク課金向けSaaS

    老舗 通信系サービス(ISP) 運用維持の コスト負担 修正拡張の コスト 変更の スピード 200X年から DOA独自言語 創業から5年 事業の急拡大 創業から10年 PHPで増改築 200X年から JSP/CORBA/C 200X年から COBOL/汎用機 クラウド マイクロサービス ドメイン駆動設計
  4. 2022/5/19 9 構想立案~要件定義~設計・開発・テスト~移行~運用保守~廃棄 20年 × 1回 5年 × 4回 1年

    × 20回 半年 × 40回 3カ月 × 80回 毎月 × 240回 隔週 × 480回 毎週 × 960回 毎日 × 5000回 なぜドメイン駆動設計か? ソフトウェア提供サイクルの変化
  5. 2022/5/19 10 構想立案~要件定義~設計・開発・テスト~移行~運用保守~廃棄 20年 × 1回 5年 × 4回 1年

    × 20回 半年 × 40回 3カ月 × 80回 毎月 × 240回 隔週 × 480回 毎週 × 960回 毎日 × 5000回 クラウド/コンテナ アプリケーション分割 データベース分割 CI/CDパイプライン ドメイン駆動設計 商流のデジタル化/多元化 金流のデジタル化/多様化 物流のデジタル化/多頻度化 事業環境の変化 事業活動の変化 実行環境の変化 アーキテクチャの変化 設計開発手法の変化 なぜドメイン駆動設計か? ソフトウェア提供サイクルの変化 実現可能性 必要性
  6. モデリング=簡略化 2022/5/19 14 さまざまな要素が 複雑に絡み合い 多元的に変化する 情報量 vs. 人間のワーキング メモリ

    状況判断 意思決定 背景知識の違い 注目点の違い 理解を助ける 簡略化 伝達を助ける 簡略化 思考を助ける 簡略化
  7. 多面的なモデリング(並行&連動) 構想 事業活動の分析 要件定義 設計 • アプリケーション • ソフトウェア •

    システム(実行環境) 実装 テスト設計 移行 2022/5/19 20 例えば 配送区分を追加するコードの変更は 事業環境の変化、事業活動の変化、 システム化構想の変化と連動している
  8. 事業活動を理解するためのモデリング 2022/5/19 24 三つの視点 商流 金流 物流 業務フロー (アクティビティ図) ユースケースモデル

    ユースケース記述(代替コース) イベントシーケンス (時系列分析) (イベントストーミング) 状態マシン ガード条件 情報モデル 識別番号 発生タイミング 制約記述 (OCL→Java) 画面 帳票 価格表/割引条件 契約書/利用規約 業務マニュアル 事業活動の構造や制約に関わる側面を重視した分析・整理をしている
  9. 設計のモデリング 2022/5/19 25 視点 パッケージ クラス テーブル API ツールでモデルや設計の状態を評価 ・可視化(関連図など)して構造を評価

    ・健全性を数値解析(LCOM*, CC, 命名,サイズ, … ) ・要点の抽出・ソート・分類 テキストで記述(Java/DDL) ・ラフスケッチ段階から ・整合性を文法的にチェック ・モデリング/設計が安定してくる=そのまま動く
  10. 実行環境のモデリング 2022/5/19 26 AWS構成図 (ほぼ配置図+コンポーネント図) 依存管理とビルドスクリプト(gradle/groovy) 環境構築のスクリプト(Terraform) パイプラインのスクリプト(yaml) 実行環境は基本的に仮想化 (クラウド/コンテナ)

    「機器」という概念はない OSレベルの操作もない世界 DSLで記述 マクロ化 実行状況の可視化・ログ化 白紙から検討しモデリングという機会がなくなりつつある パターンやテンプレートのカタログからの選択+設定でカストマイズするイメージ
  11. 私の活動範囲で肌で感じていること 開発の現場は モデリングが役に立つ 機会にあふれている モデリングや設計の必要性は なんとなく理解している いつ、何を、どうやるか やり方がわからない それっぽいことをやってみるが あまりうまくできていない

    ・流通系の基幹システム刷新、損保系の次世代基幹システム構築 ・離陸に成功したスタートアップ(介護、健康、飲食、会計、…)の技術負債との戦い ・「現場から学ぶモデル設計」技術者コミュニティ(4000人超/16回の勉強会)の反応 2022/5/19 28
  12. モデリング:動機が不足しているなら アメ and/or ムチ? → うまみを体験する • 理解しやすくなった • 判断しやすくなった

    • 伝わりやすくなった → うまみの体験を強化する(ほめる) → モデリング不足の痛みの具体例を見つける(ソフトなペナルティ) → わかりにくい/判断しにくい/伝わりにくいをフィードバック 2022/5/19 32
  13. モデリング=簡略化 2022/5/19 36 さまざまな要素が 複雑に絡み合い 多元的に変化する 情報量 vs. 人間のワーキング メモリ

    状況判断 意思決定 背景知識の違い 注目点の違い 理解を助ける 簡略化 伝達を助ける 簡略化 思考を助ける 簡略化