我已經在不同的地方看,在DDD一個重要的要求是具有存儲庫的合同有界:DDD:存儲庫合同
findByName(string name)
findByEmail(string email)
etc.
而不是提供一個通用查詢接口:
findBySpecification(Specification spec)
我明白爲什麼這很重要:能夠模擬Repository進行測試或更改基礎持久性框架。
雖然這個規則在整個應用程序中並不是很難執行,但我無法弄清楚在爲用戶提供「高級搜索」表單時如何執行它。
比方說,我有一個表格,允許通過關鍵詞搜索博客文章,通過日期,通過作者等
這些標準是自由組合的,我顯然不能提供方法爲每個用例:
findByKeyword(string keyword)
findByDateRange(Date from, Date to)
findByKeywordAndDateRange(string keyword, Date from, Date to)
findByDateRangeAndAuthor(Date from, Date to, User author)
etc.
我是否缺少某些東西或者它是規則的例外之一嗎?