エンジニアと非エンジニア間でのコミュニケーションがうまくいかない(できていた気になっていた)ことで、最終的に納品されたものと要求したことが異なり大ゲンカになったことがあります。
そんなことから2者間での共通言語の役割も担ってくれる「ドメインモデル」を使った設計手法である「ドメイン駆動設計」について少し勉強しました。
素晴らしい設計手法なのでぜひ紹介したいのですが、今回はそれについてではなく ここで使われるドメインの意味 について考察したので書きます。
ドメインって何なのさ?
エリック・エヴァンスのドメイン駆動設計やユースケース駆動開発実践ガイドを読むと何度も「ドメイン」という単語が出てきます。
ですが「ドメインの意味」ついて明確に説明されてはいませんでした。
ドメインというと多くの人はDNSやお名前ドットコムを連想させるかと思いますが、ここではそのような意味で使われていないことはドメイン駆動設計に関して学習したことがある人は言われるまでもないかと思います。
ただ、**「ではここでいうドメインはどういう意味なのか」**と疑問に感じたことがある人は私以外にもおそらくいるかと思います。
なお私はエリック・エヴァンスのドメイン駆動設計を初めて読んだときここでつまづきました。
ドメインの意味
The Oxford American English Dictionaryによるとドメインには以下の意味があります。
- An area controlled by a ruler or government
- An area of activity or knowledge
- A subset of the Internet with address all having the same suffix
3がドメインネームシステム(DNS)のドメインですね。
おそらく2がここでいう「ドメイン」の意味に近いかと思われます。
直訳すると
活動や知識の領域
となります。もう少しかみ砕くと
とある業界に関する活動や知識の対象領域
となるのかな?
例えば顧客管理システム(CRM)の開発で考えると、CRMは「顧客情報」や「組織情報」、それから「購入履歴」などを管理する必要があって、こういったビジネス課題を解決するにあたって必要なそれぞれの要素が「ドメイン」と呼ばれていると思われます。
そうすれば「ドメインモデル」や「ドメインエキスパート」といった言葉の意味もしっくりくるかと。
おわりに
日本語で「ドメイン」と検索してもこういった情報はすぐに見つからなかったので参考になれば幸いです。
ご指摘などありましたら是非お願いします。
また、海外サイトを調べていると参考になりそうな情報がみつかりましたのでそちらも参照してみてください。
参考:https://airbrake.io/blog/software-design/domain-driven-design