开发者

Base Classes on Proxy Objects

I have a webservice that is wrapped up by a data access object and is accessed by many different UI controls.

The proxy objects look something like this:

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

The DAL layers look so开发者_如何学运维mething like this:

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

Now, I need to add a 2nd webservice to the mix. The goal is to reuse the UI controls that are currently coded to use the Proxy Objects that come from the first webservice. There are about 10 common properties and about 20 that are different. To add the 2nd webservice, I'd create a 2nd DAL object that implements the same interface. The problem is that it currently returns the proxies from the first webservice.

My thought on how to solve this is to extract an interface from each of the proxy objects and mash them together. Then implement the new interface on both proxy objects. That will create a huge class/interface where some properties aren't used. Then have the DAL return the interface.

The problem that I'm facing isn't a real bug or an issue, but extracting the 2 interfaces and smashing them together just feels kind of wrong. I think it would technically work, but it kind of smells. Is there a better idea?

The resulting interface would look like this:

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

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

End Interface


Create a base class for your WebProxyObjects to inherit from.

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

Next create your two 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

Next have your DAL return the Base Class:

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

Then when calling your DataAccessObject you'll be able to ctype the return to the proper class:

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜