今まで何となくで済ませてきたドメイン駆動設計に関して改めて基本を勉強したいと思い、「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」という書籍を手に取りました!
私の備忘録として、勉強になった内容と個人的な感想をまとめています。
あくまでも備忘録なので、詳しく勉強したい方は実際に書籍を手に取ってみてください🙇♀️
第11章 アプリケーションを1から組み立てる
備忘録
- アプリケーションを最初から組み立てる過程の概要は以下の通り。
- 要求に従って必要な機能を考える。
- 機能の実現に必要なユースケースを洗い出す。
- ユースケースに関する知識とルールを、ドメインオブジェクトとして実装する。
- リポジトリやファクトリのインタフェース、ドメインサービスも準備する。
- アプリケーションサービスを実装する。
- コマンドオブジェクトも準備する。
- 第11章ではSNSのサークル機能を題材にしている。
- ルールに関わるコードがアプリケーションサービスに記載されてしまっているが、それを第12章の「集約」で解決する。
ここまでの感想
第11章で残った課題は、ソースコード上にコメントを書いたり、定数を定義したりして、暫定的に対応(というより逃げ)することも多いですね。
私も暫定対応のコードを残してしまうことがありますが、良くないなとは常に思っています。逃げ癖は良くないです笑
この書籍全体として、「ある章の解説をして、そこに課題が残っているので、次の章で解消する」、という流れが徹底されています。そのため、各章が連動しており、書籍全体で流れが明瞭だと感じます。
本書も残り少なくなってきましたが、これからの章も楽しみです!
第12章 ドメインのルールを守る「集約」
備忘録
- 集約とは、データを変更するための単位として扱われるオブジェクトの集まり、である。
- 集約には、ルートになるオブジェクトが存在する。
- 集約に対する操作はルートを経由して実行される。
- 集約を表す図で最も表現したい内容は、集約の境界と含まれるモデルであり、コードに対する正確性を問うものではない。
- オブジェクト指向プログラミングの考え方に通ずる。
- デメテルの法則は、メソッドを呼び出すオブジェクトを4パターンに限定することで、オブジェクト同士の呼び出しに秩序をもたらす。
- 第12.1.2章の例がわかりやすい。
- オブジェクトの内部データを隠蔽した際には、通知オブジェクトの活用が有効な場合がある。
- ある属性が、属性として別の集約に属するインスタンスを保持すると、誤ってそのインスタンスのメソッドを利用してしまうリスクがある。それを回避するために、第12.2.1章で解説されているIDによるコンポジションを利用すると良い。
ここまでの感想
「デメテルの法則」の名前は知らなかったが、実際にはよくやっていますね。
現在の業務では、先駆者が通知オブジェクトのようなものを自動作成する機能を用意してくれていました。先に用意してくださった方に感謝です!
第12.2.1章で解説されている「IDによるコンポジション」は、特別意識したことがなかったので、今後の業務では意識的に利用したいです(今でもそのように実装はしていることもありますが)。
第12.4章の「言葉との齟齬を消す」は非常に大事ですね。ただし、齟齬は他人との間に発生するものなので、別メンバーにレビューしてもらうことが特に大切だと考えています。自分の中では完結してしまっていることも多いので。。。
リンク
リンク
以上