SHOEISHA iD

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

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

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

実践DDD本 第4章「アーキテクチャ」 ~レイヤからヘキサゴナルへ~

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


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

 ドメイン駆動設計(DDD)は、顧客と開発者が業務を戦略的に理解し、共通の言葉を用いてシステムを発展させていく設計手法です。前回は「境界づけられたコンテキスト間のチーム関係を示す「コンテキストマップ」について紹介しました。4回目となる今回は、DDDのアーキテクチャについて紹介します。

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

本稿で紹介するアーキテクチャの種類

 エバンズ本では、DDDのアーキテクチャは「レイヤアーキテクチャ」を中心に紹介していました。これに対してIDDD本では「ヘキサゴナルアーキテクチャ」を提唱しています。さらにヘキサゴナルアーキテクチャと関係が強い「サービス指向(SOA、REST)」「コマンドクエリ責務分離(CQRS)」「イベント駆動アーキテクチャ(パイプ&フィルター、長期サーガ、イベントソーシング)」といった概念やアーキテクチャ方式についても取り上げています。

特定のアーキテクチャに依存しないDDD

 DDDは特定の技術に依存していないため、自由にアーキテクチャを選択することができます。アーキテクチャの選定においては、構築するシステムに求められる「機能要求(ユースケース、ユーザーストーリー、ドメインモデルのシナリオ等)」と「品質要求(性能、エラー制御、SLA、リアルタイム性等)」が大きな判断材料となります。最適なアーキテクチャを選択することは、プロジェクト成功に向けて重要なポイントとなります。

SaaSOvationのCIOに聞くアーキテクチャーの変遷

 それでは、適切なアーキテクチャを選択することが成功の秘訣であるというシナリオを見てみましょう。IDDD本のサンプルプロジェクトであるSaaSOvationチームのCIO(最高情報責任者)にインタビューした時のアーキテクチャの変遷は次の通りです。

DDDシステムのアーキテクチャの変遷(SaaSOvation)
順番 背景 選定アーキテクチャ 詳細
1 デスクトップアプリケーションとして初期開発 レイヤアーキテクチャ C/Sシステムのためクライアント用のアプリケーション層とDB層で構築
2 SaaSモデルへの移行に加え、アドオン機能の複雑化 レイヤアーキテクチャに「依存性逆転の原則(DIP)」を導入 DIとユニットテストを導入し品質向上。ドメインに集中し、後にUI層や永続化層を入れ替え
3 スマホへの対応、認証やセキュリティの一元管理、管理ツール、BIツールなど多数の要望 ヘキサゴナルアーキテクチャへの移行/RESTの導入 ポート&アダプターの手法により、NoSQL、メッセージングなどに対応できたことで新機能への要望に対応
4 レガシーシステムのユーザーデータをクラウドへ移行するサービスの提供 SOAの導入 アプリケーション統合フレームワーク(ESB Mule)を用いてデータをサービスで集約
5 ユーザー別の情報が表示されるダッシュボードの機能拡張 CQRSの導入 コマンド(入力)とクエリ(描画イベント)を分解して複雑なダッシュボードの表示が可能
6 時間がかかる処理のユーザーストレスやタイムアウトへの対応 イベント駆動アーキテクチャの導入 「パイプ&フィルター」パターンを導入
7 30億ドルで買収され、新ユーザー増加とシステム統合によりデータが爆発的に増加 分散変更処理への対応 「パイプ&フィルター」を分散処理対応するため、「長期プロセス(サーガ)」を導入しインフラを改善
8 政府より法的な監査の要求 イベントソーシングの導入 ドメインモデルでの全ての変更内容を追跡することでコンプライアンス問題に対応

 この表ではDDDを採用していたからこそ柔軟にアーキテクチャを拡張できるというストーリーを理解していただければと思います。上の表で紹介している順番に沿って、各アーキテクチャについて見ていきましょう。

レイヤからDIP、そしてヘキサゴナルへ

 まず、大きな変化としては、(1)レイヤアーキテクチャ(2)DIPに基づいたレイヤアーキテクチャ(3)ヘキサゴナルアーキテクチャの変遷が挙げられます。

レイヤアーキテクチャからヘキサゴナルへの変化
レイヤアーキテクチャからヘキサゴナルへの変化

次のページ
レイヤアーキテクチャとは

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

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

もっと読む

この記事の著者

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

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング