Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

戦略的設計(Strategic Design)

システム全体をどうモデルに分割し、モデル同士・チーム同士の関係をどう扱うかを決める、大きな粒度の設計。

ユビキタス言語(Ubiquitous Language)

ドメインエキスパートと開発者が共有する、ドメインモデルに基づいた共通言語。会話・ドキュメント・コード(クラス名・メソッド名)のすべてで同じ用語を使う。

  • 開発者だけの用語(テーブル名や技術用語)とビジネス側だけの用語に分裂していると、翻訳コストが発生し、モデルと実装が乖離していく

  • 用語の揺れや曖昧さが見つかったら、それはモデルの綻びのサインであり、モデルとコードを更新する機会になる

  • ユビキタス言語は境界づけられたコンテキストごとに定義される(コンテキストが違えば同じ単語でも意味が違ってよい)

境界づけられたコンテキスト(Bounded Context)

1つのモデルが一貫した意味を持つ適用範囲の境界。同じ「商品」という言葉でも、販売コンテキストでは価格やカタログ情報が重要で、在庫コンテキストでは保管場所や数量が重要、というように意味が異なる。

システム全体を1つの統一モデルで表現しようとせず、コンテキストごとにモデルを分けて、それぞれの内部で一貫性を保つ。マイクロサービスのサービス分割の理論的根拠としてもよく参照される。

コンテキストマップ(Context Map)

コンテキスト間の関係を可視化した図。関係のパターンとして以下などが挙げられている。

  • 共有カーネル(Shared Kernel):モデルの一部を複数チームで共有する

  • 顧客/供給者(Customer/Supplier):上流チームが下流チームの要求を考慮する

  • 順応者(Conformist):下流が上流のモデルにそのまま従う

  • 腐敗防止層(Anticorruption Layer):外部システムのモデルが自分のモデルを侵食しないよう、変換層を挟む

  • 公開ホストサービス(Open Host Service)/公表された言語(Published Language):多数の利用者向けに公開プロトコルを定義する

  • 別々の道(Separate Ways):統合せず独立させる

コアドメイン(Core Domain)

事業の競争力の源泉となる、最も価値のある領域。ここに最良の人材と労力を集中し、それ以外の汎用サブドメイン(認証など、どの会社でも同じもの)や支援サブドメインは既製品の利用や簡素な実装で済ませる。