「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」を読んだ
DDDについては軽く表面的な部分を齧った程度の知識だったので、いつかはちゃんと勉強しなきゃなーと思ってた。
けどエヴァンス本とかは難しそうなイメージがあってずっと敬遠しちゃってて。
そんなところに、とっつきやすそうな本書を見つけたので読んでみた。
結果、読んで良かったと思えたので感想やメモなんかを残しておく。
感想
DDDと言うとまずは「ユビキタス言語」とか「境界づけられたコンテキスト」のような用語から始まって、抽象的な話が続くようなイメージがある。
だけど本書はその辺は後回しで、単純な部分から具体的なコードで示しながら説明が進められる。なので、普段コードを書く時に悩んでたこととリンクさせながら読めたので理解がしやすかった。
あと、様々な設計上の判断の指針(何を判断基準にして利用するパターンを選択するかとか)を示してくれつつ、時には判断の難しいこともあるんだと言うことを明確にしてくれているのがとても参考になった。
メモ
以下は個人的に参考になったことのメモ。長!!
- 値オブジェクト
- 値オブジェクトにするかどうかの判断基準は「そこにルールが存在しているか」と「それ単体で取り扱いたいか」。
- 不変オブジェクトなので、メソッドの結果としては新たなインスタンスとして返却する。
- 値オブジェクトを使うモチベーション
- 表現力を増す
- 不正な値を存在させない
- 誤った代入を防ぐ
- ロジックの散財を防ぐ
- エンティティ
- エンティティにするの判断基準は「ライフサイクルを持つかどうか」(生成から破棄までの間に変化するものならエンティティ)。
- ライフサイクルを表現することが無意味である場合には、ひとまずは値オブジェクトとして取り扱う(その方がシステムはシンプルになる)。
- ドメインサービス
- ドメインモデル貧血症は避ける
- リポジトリ
- アプリケーションサービス
- ファクトリ
- オブジェクトの生成処理自体も、ドメインを表現する層の責務である。
- 仕様
- アーキテクチャ