DDDについて学んだこと
この本、すごく素晴らしい。
作者さんのGitHubのIssueも併せて読みたい。読者さんからの質問に丁寧に答えられており、本を読んでいて思った「こういうパターンってどういう設計するのがベター?」といった疑問は大体解決出来る。
- DDDの「Entity」とORMの「Entity」は、別クラスとして定義する
- それぞれに
reconstructor
というメソッドで変換処理を実装する
- それぞれに
- ドメインオブジェクト(Entityと値オブジェクト)の責務を超える業務処理については、Domain Serviceに実装する
- Domain Serviceの多用は厳禁。ドメインオブジェクトが痩せる
- Application Service(ユースケース)はエンドポイント単位に作成する
- RepositoryとDAOは別物である
- Repository: 集約の永続化
- Dao: テーブルの永続化
- ※RepositoryからDaoを呼び出すのはOK
- 集約の範囲を広げすぎるとパフォーマンスが下がる
- 集約を構成する全てのEntityと値オブジェクトを読み込む必要があるから
- パフォーマンスが下がるなら集約の範囲を再考する
- Presentation層、サービス層、インフラ層で別の例外を投げる