Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加

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

目次

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

 エバンズ本では、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)ヘキサゴナルアーキテクチャの変遷が挙げられます。

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 青木 淳夫 (株式会社ネクストスケープ)(アオキ アツオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2017年5月時点での登録メンバは52名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

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

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5