私はさまざまな場所で、DDD の重要な要件の 1 つは、リポジトリの制限されたコントラクトを持つことであると読みました。
findByName(string name)
findByEmail(string email)
etc.
また、一般的なクエリ インターフェイスを提供しない:
findBySpecification(Specification spec)
これが重要である理由は理解できます。テスト用にリポジトリをモックしたり、基礎となる永続化フレームワークを変更したりできるためです。
このルールをアプリケーション全体に適用するのはそれほど難しくありませんが、ユーザーに「高度な検索」フォームを提供する場合に適用する方法がわかりません。
ブログ投稿をキーワード、日付、作成者などで検索できるフォームがあるとします。
これらの基準は自由に組み合わせることができるため、ユースケースごとに方法を提供することはできません。
findByKeyword(string keyword)
findByDateRange(Date from, Date to)
findByKeywordAndDateRange(string keyword, Date from, Date to)
findByDateRangeAndAuthor(Date from, Date to, User author)
etc.
何かが足りないのでしょうか、それとも規則の例外の 1 つですか?