今まで何となくで済ませてきたドメイン駆動設計に関して改めて基本を勉強したいと思い、「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」という書籍を手に取りました!
私の備忘録として、勉強になった内容と個人的な感想をまとめています。
あくまでも備忘録なので、詳しく勉強したい方は実際に書籍を手に取ってみてください🙇♀️
第1章 ドメイン駆動設計とは
備忘録
- 利用者にとって役立つソフトウェアを開発するためには、以下の2点が大事である。
- 利用者の問題を解決するために価値がある知識を選択する。
- 1で選択した知識をソースコードに落とし込む。
- ドメイン駆動設計とは、ドメインの知識に焦点をあてた設計手法である。
- ドメインとは、プログラムを適用する対象に含まれる領域である。ドメインに含まれるものは何か、が重要。
- 「知識に焦点をあてる」は、利用者が抱えている課題と解決したいことに焦点をあてることを意味する。技術者は、得てして技術的なアプローチに目が行きがちである。
- ドメインモデルとは、ドメインの概念を抽象化して得られたモデルである。
- モデルとは、現実の事象や概念を抽象化した概念である。現実を完璧に再現するものではなく、情報を必要に応じて取捨選択した概念である。
- ドメインモデルの作成には、ソフトウェアの利用者と開発者の協働が必要。
- ドメインオブジェクトはドメインモデルを実装したもの。
- ドメイン ⇆ ドメインモデル ⇆ ドメインオブジェクト という関係性がある。
- ドメイン駆動設計は、長期的に運用できるシステムの礎になる。
- 1.4章に本書の構成の概要が記載されている。
ここまでの感想
第1章の主張は、主に以下の3点にまとめられると考えています。
- ドメイン駆動設計とは何か
- ドメイン駆動設計を実践する上で大切にするべきこと
- 本書の構成の概要
後続の章を読み進める中で迷ったときには、第1章に戻ってきたいと思いました。
第2章 システム固有の値を表現する「値オブジェクト」
備忘録
- 値オブジェクトとは、システム固有の値を表現するために定義されたオブジェクト。
- システムの仕様に沿った”値”の表現が存在する。
- 書籍では例として氏名が取り上げられている。
- “値”が持つ性質が適用される。
- システムの仕様に沿った”値”の表現が存在する。
- “値”が持つ性質は3個
- 不変である
- 代入は値の内容を変更する処理であり、値そのものを変更する処理ではない。
- 第2.2.1章の例が理解しやすい。
- 交換が可能である
- 代入によって値の内容を変更できる。
- 等価性によって比較される
- 値自身ではなく、値を構成する属性によって比較される。
- 値オブジェクト自身が、以下の処理を実行するためのメソッドを提供する。
- 値オブジェクト同士を比較する
- 値の属性を操作する
- 第2.2.3章の例が理解しやすい。
- 不変である
- ドメインモデルとして定義されていない概念を値オブジェクトとして定義する基準。
- ルールが存在するか。
- 単体で利用するか。
- 値オブジェクトに独自の振る舞いをメソッドとして定義する。
- 値オブジェクトは不変なので、計算結果は新たなインスタンスとして返却する。
- 値オブジェクトのルールや仕様を振る舞いとして定義する。
- 第2.4章の各例が理解しやすい。
- 値オブジェクトを利用するメリットは、仕様を明確にして管理を容易にできることである。
- 具体例
- 不正な値を存在させない
- ロジックの散在を防ぐ
- 第2.5章の各例が理解しやすい。
- 具体例
- ドメインの概念をオブジェクトとして定義する際は、まずは値オブジェクトを検討する。
ここまでの感想
プログラミングや設計の基礎という印象が強い内容でした。
とは言え、私自身が実装時にここまで深く考えたことはなく、理屈というよりもどちらかというと感覚に頼っていました。
最近は開発をする中で、細かいことに対しても「本当にこれで良いのだろうか??」と考え悩むことが増えました。
スポーツに置き換えて考えてみると、スランプ気味だと感じている時や、悪くはないけれどもモヤモヤしている時は、基礎を見つめ直すことが私の経験上最も有効でした(脳筋ですみません)。
仕事もおそらく同じなので、改めて基礎を見直します!
リンク
リンク
以上