2012-07-17 44 views
1

我在三層項目中有兩個庫 - 稱它們爲BO和DAL。幾乎在每一個DAL類實現了保存方法:MustInherit以自己的類型作爲參數

Public Function Save(ByVal someObject As BO.SomeType) As Boolean 

至於我來補充缺少的保存方法,我雖然是創造它實現了一個爲「MustInherit保存」功能的接口是一個好主意。所以,如果我輸入:

MustOverride Function Save(ByVal someObject As BO.SomeType) As Boolean 

這應該做的伎倆;但參數的類型總是不同的。例如,在類DAL.TypeA:

Public Function Save(ByVal someObject As BO.SomeTypeA) As Boolean 

,並在類DAL.TypeB:

Public Function Save(ByVal someObject As BO.SomeTypeB) As Boolean 

有沒有一種方法來處理界面中不同類型的參數?某種通用的?這甚至有可能嗎?

回答

4

完美的使用案例generics

使用通用接口:

接口:

Interface ISave(Of T) 

    Function Save(someObject As T) As Boolean 

End Interface 

實現:

Class BoClass 
    Implements ISave(Of BoClass) 

    Public Function Save(someObject As BoClass) As Boolean Implements ISave(Of BoClass).Save 
    End Function 

End Class 

Class DalClass 
    Implements ISave(Of DalClass) 

    Public Function Save(someObject As DalClass) As Boolean Implements ISave(Of DalClass).Save 
    End Function 

End Class 

或者,使用一個通用的基礎類替代一個接口

基類

MustInherit Class BaseClass(Of T) 

    MustOverride Function Save(someObject As T) As Boolean 

End Class 

實施

Class BoClass 
    Inherits BaseClass(Of BoClass) 

    Public Overrides Function Save(someObject As BoClass) As Boolean 
    End Function 

End Class 

Class DalClass 
    Inherits BaseClass(Of DalClass) 

    Public Overrides Function Save(someObject As DalClass) As Boolean 
    End Function 

End Class 
+0

完美地工作,非常感謝您的快速回答和例子。我意識到泛型,但我不知道'Class BaseClass(Of T)'語法。 – gobes 2012-07-17 12:56:59

1

這看起來像一個實現細節,其中情況下,你保存的對象應該實現一個接口,你的DAL課會打電話。

Public Interface ISaveable 
    Function Save() As Boolean 
End Interface 

然後從做實際儲蓄的對象實現它:

Public Class BOItem 
    Implements ISaveable 

    Public Function Save() As Boolean Implements ISaveable.Save 
    'do the actual saving here 
    End Function 
End Class 

你的基類會然後就問接口:

Public MustInherit Class DAL 
    MustOverride Function Save(someObject As ISaveable) As Boolean 
End Class 

然後當你創建DAL對象,您不必擔心它是什麼類型的對象,您只需致電保存:

Public Class DALItem 
    Inherits DAL 

    Public Overrides Function Save(someObject As ISaveable) As Boolean 
    Return someObject.Save() 
    End Function 
End Class 
+0

我想過,但是我的BO(實際上是Business Object)庫不應該訪問數據庫......我的項目中的主要問題是DAL引用BO而不是BO引用DAL--在這種情況下,問題不會出現。我計劃改變這一點,但後來...無論如何,感謝您的答案:) – gobes 2012-07-17 13:33:44