『ドメイン駆動設計 モデリング/実装ガイド』読書メモ

pero
·
  • 読んだ日にち:2024/01/11 ~ 2024/01/17

  • 読んだ場所:お風呂

  • なぜ読んだ?:おすすめされて1年前に買っていたけど積んでいた。DDDって何?を人に説明できるようになりたかった。

DDD とは

モデリングによってソフトウェアの価値を高めることを目指す開発手法 p11

ではモデルとは?

良いモデルとは、課題を解決できるモデルである p13

🤔 『イシューより始めよ』でいうところの「イシュー」とほぼ同義みたい。DDDも『イシューより始めよ』も、課題解決ドリブンな気がした。

知ってたこと

用語:"集約"

必ず守りたい強い整合性を持ったオブジェクトのまとまり

  • 必ず1トランザクションで集約内のすべてのオブジェクトを更新すべき

用語:"境界つけられたコンテキスト"

  • 同じモデルでも文脈が違えば別のプロパティを持つドメインモデルを使用すべきということ

  • なぜ:大規模システムで統一したドメインモデルを使おうとするとオブジェクトが肥大化してしまうから。

DDDの実践にはクリーンアーキテクチャが推奨されていること

☺️ クリーンアーキテクチャ、使い勝手が良い。MVCよりも分かり良い。

知らなかったこと・ちゃんと分かってなかったこと

"リポジトリ"はなぜドメイン層にインターフェースを置き、インフラ層で実装しているのか?

ドメイン層は永続化手段(DBの種類やテーブル構造、ORマッパーなど)に関して一切知識を持たなくなり、純粋にドメイン知識だけに集中できるようになります。 p69

そもそもリポジトリとは?

リポジトリは「集約単位で永続化層へのアクセスを提供するもの」です。 p68

💡 必ず1トランザクションで集約内のすべてのオブジェクトを更新すべき の原則のために必要な処理だったんだ。インターフェースなしで普通にインフラ層にボンって置いちゃっても良いんじゃない?と思ってました。

CQRS

  • CRUD(Create/Read/Update/Delete)のRead(≒Insert)時だけ参照用モデルを使用する