daisuzz.log

そもそもドメイン駆動設計とは何者なのか?

(2018.05.13 追記: ユビキタス言語についての記事へのリンクを追加)

今回は、「そもそもドメイン駆動設計とは?」というところを書きたいと思います。 なるべく個人的な解釈が入り込まないよう、様々な情報から引用していきます。

そもそもドメイン駆動設計とは何者なのか?

まずは、wikipedia を見ていきます。

ドメイン駆動設計(英: Domain-driven design, DDD)とはソフトウェアの設計手法であり、 「複雑なドメインの設計は、モデルベースで行うべき」であり、また「大半のソフトウェアプロジェクトでは、 システムを実装するための特定の技術ではなく、ドメインそのものとドメインのロジックに焦点を置くべき」であるとする

これだけだとなんだかよくわからないですね。そもそもドメインという概念はどういったものなのかがわかりません。

DDDquicklyを見てみると、「ドメイン駆動設計とは何か?」ということについて直接的に説明していませんが、「ドメインとは何か?」ということについては、以下のように説明してあります。

ソフトウエアを開発する目的は、実世界の作業を自動化したり、ビジネス上の 問題を解決することです。つまりソフトウエアは、業務の自動化や現実世界の 問題など、具体的なドメインのためのソフトウエアなのです。ソフトウエアは 特定のドメインから生まれ、そしてそのドメインと深く関わっている。まずは、 このことを理解しなければなりません。

わかるようなわからないような感じがします。 「ドメイン≒現実世界の問題」ということなんでしょうか。 次を見てみます。

エリックエヴァンズのドメイン駆動設計でも、「ドメイン駆動設計とはこういうものである」という直接的に書かれた記述がありませんが、DDDをおこなう原則は以下のように書かれています。

根本的には、DDDを駆動している原則は次の3つだけです。

コアドメインに集中すること。

ドメインの実践者とソフトウェアの実践者による創造的な共同作業を通じて、モデルを探究すること。

明示的な境界づけられたコンテキストの内部で、ユビキタス言語を語ること。

これをみると、DDDは「現実世界の問題に集中する」、「現実世界の問題に直面している人と開発者が一緒に作業してモデルを探求する」、「明示的な境界づけられたコンテキストの内部で、ユビキタス言語を語る」ことを原則とするらしいです。「モデル」、「境界づけられたコンテキスト」、「ユビキタス言語」については、DDDの重要な概念ですが、これは今後別の記事で書こうと思います。

(ユビキタス言語についての記事を作成しました。) iikanji.hatenablog.jp

実践ドメイン駆動設計 では、以下のような記述がされています。

DDDとは、ドメインエキスパートのメンタルモデルを注意深く洗練させて、業務で使える有用なモデルに落とし込むことだ。

(中略)

DDDとは、矛盾のない境界づけられたコンテキスト内のユビキタス言語をモデリングすることだ。

これも「エリックエヴァンズのドメイン駆動設計」と似たようなことが書いてありますね。 ドメインエキスパート(現実世界の問題、業務に直面している人)の考えをモデルに反映させることがポイントになるようですね。

最後に英語の資料ですが、DDD reference をみてみます。

Domain-Driven Design is an approach to the development of complex software in which we:

  1. Focus on the core domain.

  2. Explore models in a creative collaboration of domain practitioners and software practitioners.

  3. Speak a ubiquitous language within an explicitly bounded context

これに関しても、「エリックエヴァンズのドメイン駆動設計」で抜粋した内容と全く同じですね。 いろいろな資料を見てきましたが、つまりは、この3つの原則に沿ってシステム開発を行うことがドメイン駆動設計の正体ということになりそうです。

おわりに

色々な情報から「ドメイン駆動設計とはなにか?」ということについての答えになりそうな部分を引用して、ドメイン駆動設計について考えてみました。「ドメイン駆動設計とは何者なのか?」という問いに対しては、抽象的ですがすこしイメージできたのではないかと思います。正直な感想としては、どの資料も明確に「ドメイン駆動設計とは、~をおこなうことである」と記述しておらず、ある程度読者に任せているところがわかりづらいと言われている理由なのかもしれないなと感じました。 なかなかわかりづらい用語がならんでいますが、今後も少しづづ整理も兼ねてブログを書いていこうと思います。

参考資料