2010-04-22 46 views
0

我有一個BaseDataClass共享領域和功能是一個基類共享領域和功能良好的設計

Protected Shared dbase as SqlDatabase 
    Protected Shared dbCommand as DBCommand 
    ... 
    //also have a sync object used by the derived classes for Synclock'ing 
    Protected Shared ReadOnly syncObj As Object = New Object() 

    Protected Shared Sub Init() //initializes fields, sets connections 
    Protected Shared Sub CleanAll() //closes connections, disposes, etc. 

我有幾類,從這個基類派生。派生類具有所有Shared函數,可以直接從BLL中調用而不需要實例化。
這些派生類中的函數調用基本Init(),調用它們特定的存儲過程,調用基本CleanAll(),然後返回結果。

因此,如果我有5個派生類,每個派生類有10個函數,總共50個可能的函數調用,因爲它們都是Shared,CLR一次只調用一個,對吧?所有呼叫排隊等待,直到每個Shared函數完成。

在DAL中有Shared函數還有更好的設計,它仍然具有基類函數嗎?或者因爲我有一個基類,是否更好地轉向DAL中的實例方法?

回答

0

在這種特殊情況下,我會說不。這不是一個好設計。爲了使其正確地工作,每個類的每個方法調用首先必須獲得syncObj上的鎖,以免由於多個線程競爭同一資源而破壞狀態。忽略由此導致的潛在性能影響,您將無法讓派生類獨立工作,因爲它們都使用相同的「內容」。

我絕對推薦在這種情況下推行實例方法。如果你仍然希望你的個人課程使用相同的SqlConnection或其他什麼,然後使用依賴注入將它傳遞到類。