2015-09-07 54 views
1

假設我們有一個應用程序來處理車輛數據庫表中的車輛。Dao檢索兩組數據

所有處理邏輯都是相同的,可用於處理轎車和卡車。

有一個關鍵點,應用程序將從DAO車輛請求,這取決於它可能需要的過程轎車或卡車(不是兩者)。

什麼是處理這個問題的好方法?

心裏有以下幾點:

  1. 發送的參數,我們需要哪種類型的數據的DAO方法的說法。
  2. 將DAO設置爲「模式」以專注於特定的一組數據。
  3. 對每組數據都有兩個DAO實現。也許有一個抽象的DAO和兩個實現。服務/控制器可以使用必要的DAO。

任何人都可以推薦一個解決方案或評論,並推薦以上任何?

謝謝

回答

1

因爲DAO可以通過不同的呼叫在多線程環境中使用不使用「模式」。它可能導致無效呼叫。考慮以下步驟:

Thread 1 set dao mode to truck 
Thread 2 set dao mode to sedan 
Thread 1 read data. It reads sedans instead of trucks 

與一個附加參數(型)將溶液接縫一個很好的,提取卡車(或轎車)可以是請求的一部分。

請注意,如果將來可能有附加車輛,此解決方案不是最好的解決方案。它打破了封閉原則。 這裏簡單OCP從Wikipedia描述:

軟件實體......應該對擴展開放,但關閉 修改。

所以對這種情況最好的辦法是有一個dao接口和兩個不同的dao實現一個轎車和一個卡車。如果將來還有其他車輛存在,則不需要對現有代碼進行修改,但只需編寫一個實現dao接口的新類即可。這保證了開放封閉原則。

+0

謝謝你的解釋。開放封閉原則非常重要。 –