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

分散型アーキテクチャとドメイン駆動設計

増田 亨
January 27, 2025
2.2k

 分散型アーキテクチャとドメイン駆動設計

JJUG ナイトセミナー 2025/1 発表資料」

増田 亨

January 27, 2025
Tweet

Transcript

  1. 自己紹介 業務系アプリケーションソフトウェアの開発者 モデル駆動設計 Java/Spring Boot/IntelliJ IDEA/JIG 有限会社システム設計 代表 since 2003

    コミューン株式会社 技術アドバイザ since 2023 2 増田 亨(ますだ とおる) 著書(2017) 訳書(2024)
  2. 事業活動とソフトウェアの基本構造 16 購買 物流 変換 組立 出荷 物流 販売促進 販売

    アフター サービス 外部調達 技術開発 人的資源管理 基盤活動(財務、会計、法務、…) 5つの 主活動 4つの 支援活動 ポーター 競争優位の戦略 価値連鎖モデル =分散型アーキテクチャの参照モデル 数百の事業事例を 調査分析し一般化
  3. 競争優位性の観点から業務活動を三分類 中核の業務領域 • 競争優位の源泉 • 競合他社が簡単にまねができない独自のやり方 • 業務ロジックは必然的に複雑になる • 進化し続ける(競争優位を維持し続ける)ことが必要

    一般的な業務領域 • 他社と同じやり方でよい • 業務ロジックは複雑だが進化させる必要ない • この領域を独自に開発すべきではない 補完的な業務領域 • 自社独自のやり方が必要 • 業務ロジックは単純(CRUDやETL) 17 事業活動を「業務領域」に細分化 三つのカテゴリーへの分類が 設計判断の基本枠組みとなる
  4. 業務領域のカテゴリーとモデリング • 中核(競争優位の源泉) ⇒ 状態更新型のドメインモデリング ⇒ イベント中心型のドメインモデリング • 一般(他社と同じ、ロジックは複雑) 既存モデルを流用(独自にモデリングしない)

    • 補完(自社独自、ロジックは単純、CRUD/ETL) ⇒フラットなレコード型のデータモデリング(トランザクションスクリプト) ⇒ データ構造が入り組んだデータモデリング(アクティブレコード) 20
  5. ドメイン駆動設計:カプセル化の階層 値オブジェクト • 業務ルールを表現する基本部品 • 金額、数量、日付に関わる計算判断ロジックをカプセル化 集約(値オブジェクトの集合) • 値付け、割引、与信、オーバーブッキング、引当など個別ビジネスルールをカプセル化 パッケージ(名前空間、値オブジェクトと集約の集合)

    • 活動ポリシー(ビジネスルールの集合)をカプセル化 アプリケーション(区切られた文脈) • 業務活動(業務アクション、業務ロジック、業務データ)をカプセル化 • 個別モデルの通用範囲の境界 22 JVMがこの気持ちを分かってくれるその日まで… アプリケーション ごとのデータストア
  6. 全体を整えるソフトウェアエンジニア • 技術的な知識と技能だけでは不十分 • ソフトウェアアーキテクチャの見方に事業視点を追加する • 事業活動全体をとらえるフレームワークを活用する • 担当部分の境界の設計判断に、事業活動の構造知識を活用する おすすめ:マイケルポーター競争優位の戦略

    • 数百の事業活動の分析結果から生まれた一般モデル • うまくいく事業と、そうではない事業の差がなぜ生まれるかの分析 • あらゆる事業活動のデジタル化が進む現代では、事業活動の分析モデルが、そのま まソフトウェアシステムの分析モデルとして有用 33