SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IDDD本から理解するドメイン駆動設計

実践DDD本 第3章「コンテキストマップ」~「境界づけられたコンテキスト」の関係を俯瞰する地図~

IDDD本から理解するドメイン駆動設計 第3回


  • X ポスト
  • このエントリーをはてなブックマークに追加

コンテキスト間の連携のシーケンス図

 上記のことを踏まえた上で「アジャイルプロジェクト管理コンテキスト」と「認証・アクセス管理コンテキスト」間の連携の流れについて描かれたシーケンス図を見てみましょう。

コンテキスト統合のシーケンス例
コンテキスト統合のシーケンス例

 このシーケンス図は、左側「アジャイルプロジェクト管理コンテキスト(下流)」から開始し、中央の「腐敗防止層」を経て、右端「認証・アクセス管理コンテキスト(上流)」の「公開ホストサービス/公表された言語」を呼び出しています。

 上流側の公開ホストサービスでは、認証メンバーの変更状態を通知するAPI(この例では「https://{ドメイン}/tenants/notifications/{id}」)を提供しています。下流側のコンテキストが複数ある場合、この変更状態を使用するコンテキストだけが、このAPIを呼び出します。

ミニマル指向によるモデルの分離

 シーケンス図にある通り「アジャイルプロジェクト管理コンテキスト」では、腐敗防止層として専用のアダプタとファサードを作成しモデルの変換処理を行っています。そのため、上流のモデルの概念が、下流のコンテキストモデルに入り込まないようになっています。

 このようにコンテキスト間で同期するデータを最小にし、リモートモデルの属性のうち必要なものだけをローカルモデルに連携させることを「ミニマル指向」と呼びます。リモートモデルへの依存を減らすことで、自コンテキストのモデルに他の概念が混ざらなくなります。また、不必要な属性の同期がなくなるため、処理がシンプルになります。

SaaSOvationにおける実装方法のまとめ

 このシーケンス図では上流側のWebサービスを呼び出していますが、リアルタイム性が必須ではありません。この構成であれば、「認証・アクセスコンテキスト」のWebサービスがダウンしていても「アジャイル管理コンテキスト」が影響を受けず独立して動作することが理解いただけると思います。

 従来の開発であれば、1つのDBにしてしまったり、Webサービスと密結合にしてしまったりと、依存関係が高くなる課題を抱えていましたが、このDDDの例ではコンテキスト間の関係を疎結合にして、相互の依存関係を低くしています。

SaaSOvationの組織パターン

 最後に組織パターンの観点からも確認してみます。SaaSOvationの場合「コラボレーションコンテキスト」と「アジャイルプロジェクト管理コンテキスト」間の関係は「顧客/供給者」と考えられます。SaaSOvationは同一組織で開発しているシナリオのため、あまり難しくありませんが、実プロジェクトでは他のチームとの関係が不明瞭な場合も多いため、適切に情報を収集し組織パターンを明確にするようにします。

最後に

 本稿では、コンテキストマップについて紹介してきました。単純なサブシステム構成図のように思われがちですが、最適な連携方法を探るコミュニケーション図であることが理解できたと思います。コンテキストマップはDDD開発において非常に重要な図ですので、目立つところに貼って、チームで共有するよう努めてみてはいかがでしょうか。

 次回の第4回では、DDDのアーキテクチャについて紹介します。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
IDDD本から理解するドメイン駆動設計連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9837 2018/11/14 12:22

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング