我在多个地方看到过一个DDD中的重要需求,即Repository需要有一个有界约定:
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.
我有什么遗漏或者是这个规则的一个例外吗?