スマートデバイスアプリ開発のあれやこれや

DDDについて学んだこと

 この本、すごく素晴らしい。

little-hands.booth.pm

 作者さんのGitHubのIssueも併せて読みたい。読者さんからの質問に丁寧に答えられており、本を読んでいて思った「こういうパターンってどういう設計するのがベター?」といった疑問は大体解決出来る。

github.com

  • DDDの「Entity」とORMの「Entity」は、別クラスとして定義する
    • それぞれにreconstructorというメソッドで変換処理を実装する
  • ドメインオブジェクト(Entityと値オブジェクト)の責務を超える業務処理については、Domain Serviceに実装する
    • Domain Serviceの多用は厳禁。ドメインオブジェクトが痩せる
  • Application Service(ユースケース)はエンドポイント単位に作成する
  • RepositoryとDAOは別物である
    • Repository: 集約の永続化
    • Dao: テーブルの永続化
    • ※RepositoryからDaoを呼び出すのはOK
  • 集約の範囲を広げすぎるとパフォーマンスが下がる
    • 集約を構成する全てのEntityと値オブジェクトを読み込む必要があるから
    • パフォーマンスが下がるなら集約の範囲を再考する
  • Presentation層、サービス層、インフラ層で別の例外を投げる