我在很多地方读到过,DDD 中的一个重要要求是对存储库有一个有界合同:
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.
我错过了什么还是规则的例外之一?