Базовые классы на прокси-объектах - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть веб-сервис, обернутый объектом доступа к данным и доступ к которому осуществляется многими различными элементами управления пользовательским интерфейсом.

Прокси-объекты выглядят примерно так:

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

Теперь мне нужно добавить второй микс веб-сервиса.Цель состоит в том, чтобы повторно использовать элементы управления пользовательского интерфейса, которые в настоящее время закодированы, чтобы использовать прокси-объекты, поступающие из первого веб-сервиса.Есть около 10 общих свойств и около 20, которые отличаются.Чтобы добавить 2-й веб-сервис, я бы создал 2-й объект DAL, который реализует тот же интерфейс.Проблема в том, что в настоящее время он возвращает прокси-серверы от первого веб-сервиса.

Моя мысль о том, как решить эту проблему, состоит в том, чтобы извлечь интерфейс из каждого из прокси-объектов и объединить их вместе.Затем реализуйте новый интерфейс на обоих прокси-объектах.Это создаст огромный класс / интерфейс, где некоторые свойства не используются.Затем попросите DAL вернуть интерфейс.

Проблема, с которой я сталкиваюсь, не является настоящей ошибкой или проблемой, но извлечение двух интерфейсов и их объединение просто кажется неправильным.Я думаю, что технически это сработает, но отчасти пахнет.Есть идея получше?

Получившийся интерфейс будет выглядеть так:

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

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

End Interface

1 Ответ

0 голосов
/ 26 сентября 2011

Создайте базовый класс для ваших 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 вы сможете ввести возвращаемый результат в соответствующий класс:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...