2011-09-25 17 views
0

我有一個web服務被數據訪問對象封裝並被許多不同的UI控件訪問。代理對象上的基類

代理對象是這個樣子:

Public Class WebProxyObject1 
    ' Common properties, there are about 10 of these 
    Public Name As String 
    Public Address As String 

    ' Specialized properties there are about 20 of these 
    Public count As Integer 
End Class 

的DAL層是這個樣子:

Public Class DataAccessObject 
    Implements IDataAccessObject 


    ' These are called in MANY, MANY, MANY locations 
    Public Function GetObject(ByVal name As String) As WebProxyObject1 Implements IDataAccessObject.GetObject 
     ' Makes call to a webservice 

     Return New WebProxyObject1 
    End Function 

    Public Function ListObjects() As System.Collections.Generic.List(Of WebProxyObject1)   Implements IDataAccessObject.ListObjects 
     ' Makes call to a webservice 
     Dim list As New List(Of WebProxyObject1) 

     Return list 
    End Function 
End Class 

現在,我需要一個webservice的第2次加進來。目標是重用當前編碼的UI控件以使用來自第一個Web服務的代理對象。大約有10種共同特性和大約20種不同的特性。要添加第二個Web服務,我會創建一個實現相同接口的第二個DAL對象。問題是它目前從第一個webservice返回代理。

我想如何解決這個問題是從每個代理對象中提取一個接口並將它們混合在一起。然後在兩個代理對象上實現新的接口。這將創建一個巨大的類/接口,其中不使用某些屬性。然後讓DAL返回界面。

我面對的問題不是真正的錯誤或問題,但提取2個接口並將它們粉碎在一起只是感覺有點錯誤。我認爲它在技術上會起作用,但它有些異味。有更好的主意嗎?

生成的接口應該是這樣的:

Public Interface IProxyObject 
    ' Common 
    Property Name() As String 
    Property Address() As String 

    ' Specialized 
    Property Count() As Integer 
    Property Foo() As Integer 

End Interface 

回答

0

爲您WebProxyObjects要繼承的基類。

Public MustInherit Class WebProxyObjectBase 
    ' Common properties 
    Public Property Name As String 
    Public Property Address As String 
End Class 

下一頁創建你的兩個WebProxyObjects:

Public Class WebProxyObject1 
    Inherits From WebProxyObjectBase 

    ' Specialized properties 
    Public Property count As Integer 
End Class 

Public Class WebProxyObject2 
    Inherits From WebProxyObjectBase 

    ' Specialized properties 
    Public Property foo As Integer 
End Class 

下一頁有你的DAL返回基類:

Public Class DataAccessObject 
    Implements IDataAccessObject 


    ' These are called in MANY, MANY, MANY locations 
    Public Function GetObject(ByVal name As String) As WebProxyObjectBase Implements IDataAccessObject.GetObject 
     ' Makes call to a webservice 

     Return New WebProxyObjectBase 
    End Function 

    Public Function ListObjects() As System.Collections.Generic.List(Of WebProxyObjectBase)   Implements IDataAccessObject.ListObjects 
     ' Makes call to a webservice 
     Dim list As New List(Of WebProxyObjectBase) 

     Return list 
    End Function 
End Class 

然後打電話給你DataAccessObject當你將能夠CTYPE返回到適當的類別:

Dim DAO as New DataAccessObject 
Dim Pxy1 as WebProxyObject1 = TryCast(DAO.GetObject("BOB"), WebProxyObject1) 

If Pxy1 IsNot Nothing Then 
    'Do stuff with proxy 
End If