ドメイン駆動設計入門
book DDD
ITエンジニアとして就職し、早4年。
先輩と共にDDD(ドメイン駆動開発)で1つマイクロサービスをリリースするも、理解がふわっとしたままで気持ちが悪いので、1冊本を読んでみることにしました。
書籍紹介
こちらの本は、サンプルコード多めで実践的に書かれたDDDの入門書です。 内容はDDDの書籍として有名な『エリック・エヴァンスのドメイン駆動設計』や『実践ドメイン駆動設計』に通じており、足掛かりとなる本と言えます。
ソフトウェアのアーキテクチャに携わるようになると、ある時迷走して”俺の考えた最強のアーキテクチャ”を生み出すことがありますが、大抵それは最狂のアーキテクチャであり、あとで後悔することになります。そんな、一度アーキテクチャで痛い思いをした人にお勧めかも知れません。 設計手法としてDDDを学び、クリーンアーキテクチャ等と共に実践することで、ソフトウェアの複雑性をこれまでより上手くコントロールできるようになるでしょう。
閑話休題
サンプルコードはC#で書かれているものの、C#独自の記述に関しては丁寧に説明がされているので、オブジェクト指向が分かる人なら問題なく読み進められます。 DDDの実践しにくい概念や開発手法よりも、具体的にどう実装するのかといった所に焦点が置かれているので、実際にイメージできて試しやすくなっています。
実装に落とし込む上で、値オブジェクトとエンティティの使い分けといった基本的なことから、実装をどこに持つべきか?ドメインオブジェクトの振る舞いとして、ドメインサービスとして、アプリケーションサービスとしてなのか一度は悩むことがあると思いますが、スッキリします。
もちろん、概念や用語についても丁寧に説明されており、途中で挫折しないよう取り組みやすく構成されています。
所感
DDDにより重要なビジネスロジックがドメインオブジェクトの振る舞いとして局所化でき、具体的な技術や実装と分離され疎結合になり、変更に強くメンテナンスしやすくなるという利点を感じました。
ただし、例えば検索機能を実現する際、複雑なクエリやDBに依存する機能を用いる場合に、疎結合に保つのが難しそうだと感じます。 結局、インターフェースを切っても、複雑なクエリを実行するために特定のDBのに依存する機能やクエリをラップして、形だけ疎結合になりそうです。
銀の弾丸は無いので、解決したい問題に合わせてDDDが向いている所では積極的に導入していきたいと思います。
先述の本でDDDの概要は掴めた気がしているので、次はこの本の元となった『実践ドメイン駆動設計』(IDDD本)を読み、更に理解を深めたいと思います。
DDD興味はあるものの、実際にプロダクトに採用できるか分からないので本を買うか迷うなという方は、次の連載で概要を掴むことができます。