2011-09-25 3 views
0

데이터 액세스 객체로 둘러 쌓여 있고 다양한 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 

지금, 내가 믹스에 제 2의 웹 서비스를 추가해야합니다. 목표는 현재 첫 번째 웹 서비스에서 가져온 프록시 개체를 사용하도록 코딩 된 UI 컨트롤을 다시 사용하는 것입니다. 약 10 개의 공통 속성과 약 20 개의 속성이 있습니다. 두 번째 웹 서비스를 추가하려면 동일한 인터페이스를 구현하는 두 번째 DAL 객체를 생성해야합니다. 문제는 현재 첫 번째 웹 서비스에서 프록시를 반환한다는 것입니다.

이 문제를 해결하는 방법에 대한 제 생각은 각 프록시 개체에서 인터페이스를 추출하여 함께 섞어 버리는 것입니다. 그런 다음 두 프록시 객체 모두에 새 인터페이스를 구현하십시오. 그러면 일부 속성이 사용되지 않는 거대한 클래스/인터페이스가 생성됩니다. 그런 다음 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을 만들 : 당신의 DataAccessObject를 호출 할 때 수익을 CTYPE 할 수 있습니다 그리고

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 

:

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은 기본 클래스를 반환해야 적절한 등급으로 :

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