ContextMap 順応者 (Conformist) について
順応者(Anticorruption Layer)
DDDのコンテキストマップの順応者について調査しました。
オンラインショッピングシステムの例
システムは、注文管理コンテキスト
と在庫管理コンテキスト
という2つの境界づけられたコンテキストで構成されていると仮定します。
それぞれのコンテキストは独自のドメインモデルを持ち、異なるチームによって開発されています。
注文管理コンテキスト
は、顧客
の注文
処理を担当しています。顧客
が商品
を注文する
と、在庫管理コンテキスト
に商品
の在庫確保
を依頼する必要があります。
しかし、注文管理コンテキスト
と在庫管理コンテキスト
は、それぞれ異なるドメインモデルと言語を持っています。
このような状況で、順応者を導入して両コンテキスト間の連携を円滑に行います。
注文管理コンテキスト
が在庫管理コンテキスト
に商品
の在庫確保
を依頼する際、順応者を使用します。- 順応者は、
注文管理コンテキスト
のモデルや言語を在庫管理コンテキスト
が理解できる形式に変換します。例えば、注文管理コンテキスト
では「Order」オブジェクトが使用されている場合、順応者はこれを在庫管理コンテキスト
の「InventoryRequest」オブジェクトに変換します。 在庫管理コンテキスト
は、順応者を介して受け取ったデータを使用して、在庫確保
処理を実行します。処理が完了したら、結果を順応者に返します。- 順応者は、
在庫管理コンテキスト
からの結果を注文管理コンテキスト
が理解できる形式に変換し、注文管理コンテキスト
に返します。
このように、順応者を使用することで、注文管理コンテキスト
と在庫管理コンテキスト
は疎結合を保ちつつ、効果的に連携することができます。
それぞれのコンテキストは、自身のドメインモデルに沿ってデータを処理できるため、システム全体の一貫性や品質が向上します。
ビジネス管理システムの例
コンテキストマップの順応者(Conformist)の具体例を、ビジネス管理システムを使用して説明します。
このシステムには、従業員管理コンテキスト
と給与計算コンテキスト
という2つの境界づけられたコンテキストがあります。
従業員管理コンテキスト
は、従業員
の個人情報
や役職
、所属部門
などのデータを管理しています。
一方、給与計算コンテキスト
は、従業員
の給与やボーナス
、控除
を計算し、支払い処理
を担当しています。
このシナリオでは、給与計算コンテキスト
は従業員管理コンテキスト
から従業員情報
を取得する必要があります。
しかし、従業員管理コンテキスト
は、システム全体で使用されるため、他のコンテキストの要求に合わせて変更を行うことが難しい場合があります。
そこで、給与計算コンテキスト
は順応者(Conformist)の役割を担い、従業員管理コンテキスト
が提供するデータ構造やインターフェースに従います。
これにより、給与計算コンテキスト
は従業員管理コンテキスト
と円滑に連携することができ、システム全体の調整を容易にします。
順応者関係の実現方法:
給与計算コンテキスト
は、従業員管理コンテキスト
が提供するAPIやデータ構造を利用して、従業員情報
を取得します。給与計算コンテキスト
は、従業員管理コンテキスト
のデータ構造やインターフェースに従い、自身のビジネスロジックを実装します。従業員管理コンテキスト
が変更された場合、給与計算コンテキスト
はそれに応じて自身の実装を更新し、システム全体の調整を容易にします。
順応者のアプローチは、1つのコンテキストが他のコンテキストの影響を受け入れ、連携を円滑に進めることを目指しています。