SHOEISHA iD

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

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

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

ドメイン駆動設計のメリットと始め方 ~ 1章「DDDへの誘い」

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


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

 本連載では、書籍『実践ドメイン駆動設計』(以下、IDDD本)の流れに沿って、重要な部分にフォーカスすることで、ドメイン駆動(DDD)について理解することをお手伝いします。初回となる今回は、1章「DDDの誘い」を解説します。

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

はじめに

 ドメイン駆動設計(DDD)とは、2003年にエリック・エヴァンス氏が『Domain-driven design』という書籍にて提唱したソフトウェア開発手法です。DDDを簡単に説明すると「顧客と開発者が業務を戦略的に理解し、共通の言葉を使いながらシステムを発展させる手法」です。具体的には、チームの共通言語である「ユビキタス言語」を用いて「ドメインモデル」を構築し、それをコードとして実装します。また大規模で密結合なシステムにならないように「ドメイン」と「境界づけられたコンテキスト」にてシステムを分割し、「コアドメイン」という最重要領域に集中して開発を行います。

ソフトウェア開発の課題とDDDが解決すること

 DDDの登場から10年以上が経ち、DDDは着実に普及しつつあります。DDDが普及してきている背景として、システム開発がますます多機能/複雑になり、ビジネス的にも敏速な変更が求められていることが挙げられます。従来のように、全システムを対象に設計者が上流工程で時間を掛けて仕様を検討し設計書通りにプログラマが開発するといった従来の手法では、顧客が求める機能と速度感にズレが発生してしまうため、ビジネス的な成功が困難になってきています。

 そのため、DDDでは大規模な1つのシステムとデータベースで構築するのではなく、業務にとって適切な独立したシステムに分割します。そして、顧客と開発者で話す言葉を共通化し、トランザクション処理ではなく業務を表すドメインモデルを構築することで、お互いのズレを減らしていきます。

DDDに注目が集まる背景と解決例
DDDに注目が集まる背景と解決例

 またマイクロサービスや非同期処理を簡単に構築できる「クラウド」環境が普及してきたことや、顧客と融け合う「アジャイル」が普及してきたことも、DDDのに注目が集まる一因となっています。

本書で紹介する内容と対象読者

 2013年、ヴァーン・ヴァーノン氏の書籍『Implementing Domain-Driven Design』(邦題『実践ドメイン駆動設計』)が発売されました。これはDDDで開発した人の経験を元にDDDを再整理し、実装方法について解説しています。そこで、本連載では、IDDD本の流れに沿って、重要な部分にフォーカスすることで、DDDについて理解することをお手伝いします。当記事をきっかけに、DDDに新たに挑戦される方がいましたら幸いです。

 なお、当連載の対象読者は、DDDに関心を持たれている方、または、DDDで開発したい方を対象としています。DDD以前の既存技術に関する詳細は説明しませんので、中級者以上の開発者を想定しています。

IDDD本の目次

 IDDD本の目次を見てみましょう。IDDD本の目的は「DDDの理論を実際に適用する」ことです。本稿では、これらの流れに沿って各要素をご紹介します。

IDDD本の構成
区分 タイトル
目次 概要説明 序文、賛辞、はじめに、著者について、本書の読み方
1章 DDDのメリット DDDへの誘い
2章 戦略的設計 ドメイン、サブドメイン、境界づけられたコンテキスト
3章 コンテキストマップ
4章 戦術的設計 アーキテクチャ
5章 エンティティ
6章 値オブジェクト
7章 サービス
8章 ドメインイベント
9章 モジュール
10章 集約
11章 ファクトリ
12章 リポジトリ
13章 境界づけられたコンテキストの結合
14章 アプリケーション

 1章〜3章は主に「戦略的設計」について解説しています。戦略的設計とは「チームで使うパターン」のことです。ビジネスにおける言語に価値を置き、業務に関わる人の考え方をドメインモデルとして表現します。

 4章〜10章では「戦術的設計」について説明しています。戦術的設計とは「テクニカルなパターン」のことです。アーキテクチャ、DDD固有のパターンといった技術的な内容が含まれます。

DDDを構成する要素
DDDを構成する要素

 なお、「戦略的設計」を実施せず、エンジニアが取り組みやすい「戦術的設計」にだけ注力すると、「軽量DDD」と呼ばれる事業価値を発揮できない貧弱なDDDになってしまうため注意が必要です。

主要なDDD解説本

 DDDの解説を始める前に、日本で発売されているDDDに関する書籍について紹介しておきます。

日本で発売されているDDD関連書籍
原書名:略称(日本語翻訳名) 著者(翻訳・監修) 原書発売年(日本語版発売年) 内容 日本語版の総ページ数
Domain-Driven Design - Tackling Complexity in the Heart of Software:DDD本/エヴァンス本(『エリック・エヴァンスのドメイン駆動設計』) Eric Evans(和智右桂、牧野裕子 訳 今関剛 監修) 2003年(2011年) パターン・ランゲージ形式によるDDDの理論 538P
Applying Domain-Driven Design and Patterns:ADDDD本(『ドメイン駆動』) Jimmy Nilsson(長尾高弘 訳 尾島良司 監修) 2006年(2008年) C#/.NETでの実践例 476P
Implementing Domain-Driven Design:IDDD本(『実践ドメイン駆動設計』) Vaughn Vernon(高木正弘) 2013年(2015年) DDDの理論とJavaでの実践例 583P

 DDDの実装方法だけを理解しようとしていると形式的な実践となり、失敗する可能性が高くなります。そのため、DDDに興味を持たれた方は、これらの書籍に目を通し「ソフトウェア開発の複雑さに対して、どのようにして美しく構築しようとしているのか」という信念を理解して頂ければ幸いです。

次のページ
[WHAT]ドメイン駆動設計の概要

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

  • 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/9546 2018/11/21 14:13

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング