У меня есть веб-сервис, обернутый объектом доступа к данным и доступ к которому осуществляется многими различными элементами управления пользовательским интерфейсом.
Прокси-объекты выглядят примерно так:
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