ドメインとは | これで理解できるドメイン駆動設計!
「ドメイン」という言葉は、ドメイン駆動設計を学ぶ人にとって最初に疑問を抱き、本を何冊も読んでも腹落ちすることのない言葉でしょう。 それは当然の話であり、実のところ「ドメイン」という言葉はドメイン駆動設計の言葉ではありません。ドメイン駆動設計の言葉でないから、ドメイン駆動設計の本をいくら読んだところで答えを得ることはできません。
では、「ドメイン」という言葉はなんの言葉なのかというとビジネスアナリシス(要求分析)分野の言葉です。ウォーターフォールでいうところの上流工程というやつです。ビジネスアナリシス分野の本にも定義が書かれています。
ドメイン
分析の対象となる問題領域。ある組織の全部または一部、およびその組織とやりとりする外部のステークホルダーなど。
CBAP/CCBA ビジネスアナリシス認定スタディガイド(下) p.306
しかし、この定義を読んでもピンと来ないだろうと思います。なので、ここでは課題とソリューションという言葉からはじめて、「ドメイン」という言葉が一体どういう意味なのかを説明します。
そうでもありませんよ。
エッセンシャル スクラムでも各スプリントで分析をすることは書かれていますし、More Effective Agileにおいてもプロダクトオーナーと要求に関する話が多く書かれています。
アジャイルの時代ですが、ウォーターフォールでやっていたことはアジャイルにおいても必要な活動です。ウォーターフォールの何が問題かといえば、何もかも事前にやってから次の段階に移るというやり方にあります。要求分析した機能がテスト段階になって不要とわかったり、実装段階で分析結果が間違っていたと判明するかもしれません。アジャイルは必要なだけの要求分析を行なって実装を行いリリースするというのを繰り返すことで、無用な活動を行わないようにするというプラクティスです。
どちらにせよ、要求を分析して実装してテストしてからリリースするという各ステップがなくなることはありません。バッチで行われるか順次行われるかの違いでしかありません。
課題とソリューション
世の中にはたくさんの転職サイトがあります。なぜ、転職サイトというものが世の中に存在し、転職したい人は転職サイトを利用するのでしょうか。それは、転職したい人に「転職したいが、就職したい会社を探す手段を持っていない」という課題があるからです。そして転職サイトはその課題を解決する「就職したい会社を探す手段」、つまりはソリューションを提供しているからです。
課題を解決するためにソリューションが提供されるのですが、課題だけを見てソリューションを提供しても良いソリューションにはなりません。例えば、求人を出している会社を一覧表示しただけのサイトだったら、使い勝手が悪くて誰も使ってくれないでしょう。「就職したい会社を探す手段」ならなんでもよい、というわけにはいきません。
どんな人が使うのか、どんな職種の仕事を取り扱うのか、法的な制限はないか、利用者はどういうふうに転職先を探すのか、求人はどうやって集めるのか、どうやって売上を得るのか、よいソリューションを提供するには、そういったものを考える必要があります。
ドメインとは
課題を解決するためのソリューションを提供するには、課題だけではなく課題に関係する周りの人や事柄についても考え、分析する必要があるということは理解できたでしょうか。理解できたならおめでとうございます、あなたはドメインを理解できました。
ドメインとは、ソリューションを提供するために分析しなければならない範囲のことです。やり取りされる情報はもちろん、関係する人や会社、物、あるいはそれらの動き、関係する法律、社内のルールなどソリューションを提供するために調べ、考え、分析する必要のある、ありとあらゆる物事が存在する範囲のことです。
つまり、「ドメイン駆動設計」とは、分析対象の事柄に基づいて設計を進行させるということです。正確ではありませんが、今のところの定義はこれで十分でしょう。より正確な定義をするには、次のモデルの話をする必要があります。
Next: モデル、ドメインモデル、モデリングとは
ここまでの説明では、「それって普通のソフトウェア開発では?」と思うかもしれません。確かにドメインを分析するというのは、ウォーターフォールであれアジャイルであれ行われる活動です。普通に行われる活動だから、ドメイン駆動設計においてはドメインを分析するというのは前提になっています。
ドメインを分析することを前提として、ドメインの分析結果を設計に反映させるというのがドメイン駆動設計というアイディアの核です。
あらゆる組織でビジネスアナリスト(ドメインを分析する人。プロダクトオーナーが担うこともあるしエンジニアが担うこともある)の分析結果を元に機能を実装しています。ドメイン駆動設計を実践している組織と実践していない組織の違いは、その分析結果をコードの設計に反映させているかどうかです。実践していない組織は、クラス名やメソッド名、変数名はエンジニアが好きに決めた言葉が使われ、クラス構造を図にしてもビジネスアナリストにとってはピンと来ない物になります。では、実践している組織はどうかというと、名称もクラス構造もビジネスアナリストに通じるものが使われます。これが分析対象の事柄に基づいて設計を進行させるということです。
Next: モデル、ドメインモデル、モデリングとは