2010-07-25 54 views

回答

3

如果您只想使用模型對象(主要是)作爲數據容器,則應將過濾器放入您已使用的DAO中。確保用戶定義的標準獨立於數據庫是一個好習慣(所以傳遞你自己的過濾器對象而不是簡單的例如Hibernate Criteria,通過例子查詢也可能工作得很好)。

那麼你的DAO方法可以是這樣的:

public interface BeanDao 
{ 
    List<Bean> findAllByFilter(BeanFilter filter); 
} 
+0

請問,你能分享這個道的任何實現嗎? – 2016-05-27 17:56:21

1

是否將檢索對象的數量更多,然後過濾或簡單地在第一時間檢索正確對象的選擇依賴於基礎數據。大多數應用程序將使用這兩者的組合。

我會考慮的事情是:

網絡帶寬&內存要求

如果濾波後有少量的結果,但再過濾它可能是一個前顯著較大數量的結果浪費帶寬和內存資源來完成代碼中的過濾。

查詢速度

過濾在數據庫中的結果可以比代碼做邏輯更昂貴 - 磁盤VS存儲器。索引是必要的,以使其值得。

可維護性

創建新的查詢可能會非常耗時。這絕對意味着寫一些sql並重新審視各個階段的測試。它可能需要修改數據庫模式,例如添加索引以加快查詢速度。

在Java中解決這個問題時,可能需要考慮訪問者模式。我經常使用兩個接口SingleMatcher和MultipleMatcher來過濾一組對象。這些實現可以結合使用以創建新的用戶定義標準。這樣做的另一個優點是,一旦你有了用戶可能想要使用的匹配器,就不必回到測試中來創建新的標準。