『ドメイン駆動設計』の解説記事を書きました

本日(1月18日)発売された、Software Design誌 2023年2月号の第一特集で「ドメイン駆動設計入門」を書きました。 執筆の意図と記事の概要を簡単にまとめておきます。

Software Design 2023年2月号|技術評論社

執筆の意図

特集のサブタイトルにある通り「設計力を磨きたい」読者が、ドメイン駆動設計の基礎を知ることで「設計の手法とアイデアの引き出し」を増やすことの役に立てればと思い執筆を引き受けました。

重視したこと
  1. 断片的な用語やパターンの解説でなく、ドメイン駆動設計の全体像と要点を伝える
  2. 全体像を伝えるための図や表を多めにした(ソースコードの例は少ない)
  3. 全体像と要点は、原典である『エリック・エヴァンスのドメイン駆動設計』(以下『ドメイン駆動設計』)の説明を中心にした
  4. ドメイン駆動設計の具体例として『ドメイン駆動設計』に出てくる国際海上貨物輸送の具体的な業務知識の解説を多めにした
  5. マイクロサービスなど分散アーキテクチャドメイン駆動設計の関係など、新しめの内容を盛り込んだ

基本的にはエヴァンスさんの『ドメイン駆動設計』の概要の説明です。

まだエヴァンス本を読んだことがない人や、読んだことはあるけどなんかよくわからんかったという人が、この記事を読むことで、全体の流れと要点をつかみ、エヴァンス本を興味深く読めるようになるとよいな、という思いで記事を書きました。

ドメイン駆動設計とは?(本特集記事の第1章)

ドメイン駆動設計の基本的な考え方を説明する情報が少ないと感じていました。 そういう問題意識から、この特集の第1章では『ドメイン駆動設計』の「はじめに」と第1部「ドメインモデルを機能させる」の3つの章をわかりやすく説明しようと考えました。

まず、ドメイン駆動設計の基本的な考え方を以下の図の流れで説明しています。

次に、ドメイン駆動設計という設計のやり方の中心となるドメインモデルとその三つの用途について書いています。(ドメインモデルの作り方は本特集記事の第2章で具体的に説明しています)

また、ドメインモデルを中心にどのようにアプリケーション全体を組み立てるかを、ヘキサゴナル(ポート &アダプタ)アーキテクチャやクリーンアーキテクチャの概要に触れながら説明しています。

ドメインモデルを理解しよう(本特集記事の第2章)

ドメイン駆動設計の中心となるなるドメインモデルの作り方についての解説です。

題材は『ドメイン駆動設計』のあちこちにでてくる国際海上貨物輸送のオーバーブッキングルールです。

図のような単純な理解からはじまり、業務知識を広げながらドメインモデルを成長させていくやり方を説明しています。

オーバーブッキングルールが、国際海上貨物輸送ビジネスにとっていかに重要であるか、そして、どういう複雑さがあるかという業務知識に触れながら、値オブジェクトなどを使ってドメインモデルを組み立てる道筋を紹介してみました。

国際海上貨物輸送の業務そのものについての説明が多めです。そこに興味が持てれば、ドメインモデルを組み立てるパターンの説明も理解しやすいと思います。

業務を理解するために次の三つの視点を組み合わせるやり方を説明しています。ドメインモデルの中心となるのは業務ルールの視点です。他の二つの視点と関連づけることで、業務の理解が立体的になります。

  • 業務プロセス
  • 業務データ
  • 業務ルール

また、業務ロジックを表現するための三つのパターンを簡単に比較しながら、ドメインモデルの特徴を説明しています。

分散アーキテクチャドメイン駆動設計(本特集記事の第3章)

最近は、分散アーキテクチャやマイクロサービスとの関係でドメイン駆動設計が取り上げられることが増えてきました。 この章では、ドメイン駆動設計の考え方とやり方をどのように分散アーキテクチャに活かしていくかを説明しています。

ドメイン駆動設計』が書かれた当時は、分散アーキテクチャはそれほど一般的ではありませんでしたが、この本の第4部で紹介されている大規模なシステムに取り組むための「境界づけられたコンテキスト」と「コンテキストマップ」の考え方が、最近では分散アーキテクチャのモデルとして利用されることが多くなってきています。

「境界づけられたコンテキスト」はどう分けたらうまくいくか、「コンテキストマップ」はどうつなげばよいかを設計するための考え方とやり方です。

また、さまざまな業務領域をそれぞれの特性ごとに適切な設計や開発のやリ方を検討するために『ドメイン駆動設計』の「コアドメイン」という考え方が役に立ちます。

ドメイン駆動設計のパターン名と用語集(本特集記事の第5章)

ドメイン駆動設計のパターン名や用語は、意味がわかりにくく、人によって捉え方にばらつきが多いようです。 この章では、主要な用語を取り上げながら、その用語の一般的な意味と『ドメイン駆動設計』という文脈に限定した場合の意味について説明しています。

また、用語の意味は他の用語との関係で理解することで、理解しやすくなります。図のように、主なパターン名と用語を関連づけながら、主要な用語を解説してみました。

設計の手法とアイデアの引き出しを増やす

ドメイン駆動設計は銀の弾丸でもないし、唯一の正しい設計技法でもありません。 しかし、ドメイン駆動設計の考え方とやり方を理解することで、設計の手法やアイデアの引き出しは確実に増えるはずです。

ここで紹介したSoftware Design 2023年2月号の特集記事が設計力を磨きたいと思っているソフトウェア開発者のお役にたてればうれしいかぎりです。