假設您正在編寫零售連鎖店的應用程序。所以,你可以設計你的對象模型,以便將'Store'定義爲核心業務對象和大量支持對象。比方說,「商店」看起來如下:什麼時候「進入」和何時不到?
class Store implements Validatable{
int storeNo;
int storeName;
... etc....
}
所以,你的客戶會告訴你,你必須從一個Excel工作表到應用程序中導入商店的時間表,你將不得不對「時間運行一系列驗證的。例如,'StoreIsInSameCountry','StoreIsValid'等等。因此,您將設計一個Rule界面來檢查所有的業務條件。類似這樣的:
interface Rule T extends Validatable> {
public Error check(T value) throws Exception;
}
現在,問題來了。我從這張Excel表格上傳了2000家商店。所以,我最終會運行爲商店定義的每個規則多次。如果我對數據庫有4條規則= 8000條查詢,即對連接池有16000條命中。對於一個簡單的檢查,我就只需要檢查商店是否存在,查詢將是:
SELECT STORE_ATTRIB1, STORE_ATTRIB2... from STORE where STORE_ID = ?
這樣,我會得到讓我的「商店」的對象。當我沒有從數據庫中得到任何東西時,那個商店就不存在了。所以,對於這樣一個簡單的檢查,我將不得不在2000個商店中打2000個數據庫。
另外,我可能只是這樣做:
該查詢實際上返回比做它上面的2000倍,一個快得多。 但是,它的設計並不適用於只能爲單個商店運行規則。
我知道使用IN不是建議的方法。那麼,你認爲我應該怎麼做?我應該繼續並在此使用IN,因爲它會在這種情況下提供更好的性能?還是應該改變我的設計?
如果你在我的鞋子裏,你會怎麼做?最佳做法是什麼?
爲了做你所說的話,如果我要將結果集緩存到某個地方,那麼這樣做會很有意義。即使採用上述方法,我也必須一次驗證一個商店,而不是緩存結果集,我不知道如何將自己的1999年點擊數據庫。 – Jay 2009-07-20 14:14:32