2

私は3層プロジェクトに2つのライブラリを持っています-それらをBOとDALと呼びます。DALのほぼすべてのクラスは、Saveメソッドを実装しています。

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

不足しているSaveメソッドを追加する必要があるため、「MustInheritSave」関数を実装するインターフェイスを作成することをお勧めします。したがって、次のように入力します。

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

2 に答える 2

5

ジェネリックの完璧なユースケース。

汎用インターフェースの使用:

インターフェース:

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
于 2012-07-17T12:46:40.697 に答える
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 オブジェクトを作成するときに、それがどのタイプのオブジェクトであるかを気にする必要はありません。save を呼び出すだけです。

Public Class DALItem
  Inherits DAL

  Public Overrides Function Save(someObject As ISaveable) As Boolean
    Return someObject.Save()
  End Function
End Class
于 2012-07-17T13:13:07.767 に答える