スキップしてメイン コンテンツに移動

ドメイン駆動設計と理解のためにはしっかりした題材が必要かもしれない

『ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本』という書籍も読んだ。
いろんな本を読むことで多角的にドメイン駆動設計を徐々に理解しようとしているのが現状。

この書籍からは、次の学びを得た。

値オブジェクトにすべきかどうかの判断基準として、筆者は「そこにルールが存在しているか」という点と「それ単体で取り扱いたいたいか」という点を重要視しています。

出典:ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本 Loc.895

それを取り巻く環境によってモデルに対する捉え方は変わります。値オブジェクトにも、エンティティにもなり得る概念があることを認識し、ソフトウェアにとって最適な表現方法がいずれになるのかは意識しておくと良いでしょう。

出典:ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本 Loc.1315


正直言って、まだエンティティと値オブジェクトの違いについてしっくりきていない。
最近やっていたゲームから比喩を得て理解しようとしたけれど、やっぱりぴったりははまらない。

そんで、じゃあまずは手を動かしてみるかと思って、例えば何かの在庫と購入にあたっての在庫引き当てができるみたいなものを想定して作ってみるか、とも思ったけれど、適当に作るのも意外と難しくて。

まずユースケースがわからないからApplication層の作りが曖昧になってしまって、そうなるとドメイン知識として何を持たせるとか、それはドメインのエンティティが持つべきじゃないからドメインサービスにしようとか、そういう発想につながらない。

仮の題材でやってくにしてもそれなりにしっかり練り込んでないとしんどいんだなというのは最低限理解した。

わからないなりに、IDDD(実践ドメイン駆動設計)のサンプルを眺めてそれぞれのつながりであるとか、ディレクトリ構成とかをまずは理解している。
まあ、こうやってつくりがわかったとして、それで実装できるようになっても、多くの人が揶揄する「軽量DDD」にすぎないのかもしれないと薄々わかっているのだけど、だとしてもわかるところから、入れるところから入っていかないと、いつまでも建物の外観を眺めてるだけで終わってしまうので。

ちなみに、細かいけど、GitHubのRepoの説明の中に貼ってあるこのリンクはDead Linkになってた。 "http://vaughnvernon.co/?page_id=168"