C3 戦略的設計
戦略的設計とは
戦略的設計は、ビジネス価値を最大限に引き出すために、「何を作るべきか」「どのように作るべきか」というシステム全体の設計方針を決める重要な側面
なぜ戦略的設計が必要なのか
戦略的設計を行わない場合の問題点
技術手動の設計が行われる
部分最適な設計が行われ、全体としての価値を生み出していない
ビジネスとの乖離があり、本当に必要な価値を提供できていない
境界が不明確になり、システムが不必要に複雑化し、変更しづらい
戦略的設計による改善
ビジネスの本質的な課題を理解した上で設計を行い、価値を最大化できる
技術手動の場合「高速な書籍検索機能の実装」
戦略的設計の場合「顧客が欲しい書籍を簡単に見つけられる体験の実現」
将来の変更や拡張を考慮した設計
目先の設計の場合「現在の会員情報を管理する」
戦略的設計の場合「会員サービスの進化に合わせて拡張可能な設計」
関連する概念をグループ化し、適切に分離することで、変更や拡張が容易な設計
ドメインの理解
ドメインモデリング
ドメインモデリングとは、特定の問題領域を理解し、それを表現するための構造化されたモデルや図を作成するプロセスのこと。で主に2つの重要な目的がある
全体像を把握し、関心領域の範囲を「地図」として可視化する
ステークホルダー間で重要な中心課題について認識を合わせる
サブドメインの特定
サブドメインとは、ドメインを機能や役割に基づいて分割した、より小さな問題領域のことで以下の3種類がある
コアサブドメイン(中核)
ビジネスの競争優位性を直接生み出す中核領域
コアサブドメインは自社のビジネスモデルの根幹となるため、自社開発が必須
汎用サブドメイン(一般)
多くの組織で共通して必要とされる機能領域
オンライン書店における「決済管理」がこの領域にあたる
汎用サブドメインにはまずサードパーティサービスの活用を検討する
支援サブドメイン(補完)
コアサブドメインをサポートする補助的な業務領域
オンライン書店における「在庫管理」の問題領域がこれにあたる
支援サブドメインには中程度のカスタマイズ性が必要
ビジネスの独自性には直接関係しないものの、高膣的な業務運営には不可欠なため
境界づけられたコンテキスト
境界づけられたコンテキストは、「その問題をソフトウェアでどう表現して解決するか」を定義する境界
サブドメインとコンテキストは1対1の関係が望ましい
境界づけられたコンテキストの中ではユビキタス言語を使った共通言語を使用する ⚠️境界づけれれたコンテキストはマイクロサービスと箱なる概念。前者は論的な境界であり、後者は物理的な境界をもつ
境界づけれれたコンテキストが需要な理由
複雑性の管理
大規模なシステムを論理的な境界で分割することで、各部分の複雑性を独立して管理できる
各コンテキスト内では、一貫した用語とルールを適応する
チームの自律性
各コンテキストを異なるチームが担当することで、並行開発が可能
変更の影響範囲の限定
境界が明確なため、変更の影響を特定のコンテキスト内に閉じ込めることができる
境界が曖昧な場合の問題
大規模なオンライン書店システムを例にした場合、、
システム全体で単一のモデルで構築していると、書籍という概念が複数の異なる意味や役割を持つことになる
システム内での責任境界が不明確になる
書籍の在庫状態を減らすのは、注文時なのか支払い時なのか?といった判断が難しくなる
境界づけられたコンテキストによる解決
明確な責任分担
特定の業務領域に特化したコンテキストを作ることで、責任の所在が明確になる
カタログコンテキスト
書籍情報の表示
レビュー・評価管理
在庫コンテキスト
在庫数管理 <-- 在庫状態を減らす場合の判断がシンプルになる
出版社との取引管理
コンテキスト固有のモデル設計
各コンテキストは、そのコンテキスト内で必要な情報だけを含む独自モデルを持つ。
これにより、1つのモデルのが過剰に肥大化することを防ぐ
コンテキストマッピング
コンテキストマッピングは、異なるモデルを持つコンテキスト間の関係性を可視化し、それらの統合方法を定義するための手法
コンテキストマッピングが必要な理由
チームの責任範囲の明確化
曖昧な場合は、チーム同士の連携や責任分担が不明確になる
お問い合わせ対応などどのチームが対応すべきか悩んでしまう
システム統合の計画立案
どのコンテキスト同士が連携すればよいのか一目でわかる
変更の影響範囲の制御
Aコンテキストが扱っているモデルに返納を加えたい場合に、他のコンテキストに影響が及ぶ場合、コンテキスト間の連携方法を明示的に定義することで、影響を制御できる
コンテキスト間の連携パターン
table: コンテキスト間の連携パターン
戦略 説明 パターンの分類
モデルの一部を同じにする戦略 特定の部分で共通のモデルを使用する方法 協力に基づくパターン
モデルを相手に合わせる戦略 どちらかのコンテキストが相手のモデルに適応する方法 顧客/供給者の関係に基づくパターン
モデル間に変換層を設ける戦略 独立性を保ちながら変換機構で連携する方法 保護と返還に基づくパターン