VB.NET - Я занимаюсь рефакторингом и могу использовать некоторую помощь - PullRequest
0 голосов
/ 26 августа 2011

Я работаю с vb.net, wcf, wpf и реорганизую рабочий код с надеждой уменьшить избыточность. У меня есть куча методов, которые вызываются в нескольких местах кода, которые имеют незначительные отличия друг от друга, и я хотел бы заменить их одним методом.

В частности, каждый из избыточных методов обрабатывает 1-й массив, который содержит различные объекты, которые я создал. Есть несколько из этих различных типов объектов, каждый из которых имеет разные подписи, но у них всех есть свойства "name" и "Id". (Также у этих объектов нет общего базового класса, но я мог бы добавить это при необходимости.) Каждый из избыточных методов имеет дело с разными типами объектов.

Для рефакторинга кода я хотел бы передать любой из различных массивов объектов одному новому методу, который мог бы получить доступ к свойствам "name" и "id". Я пытаюсь написать этот новый метод таким образом, чтобы я не обновлял его, если бы я создал больше объектов в будущем.

Я читал делегаты и общие классы, но не могу понять, как это вписывается. Было бы почти так, как если бы я хотел создать общий класс, который мог бы обрабатывать каждый из моих типов объектов, но потом каким-то образом также получить доступ к свойствам "name" и "id" различных типов объектов.

Любая помощь, которую вы можете оказать, будет оценена. Также имейте в виду, что этот проект написан на VB.net.

Спасибо Mike

Ответы [ 2 ]

1 голос
/ 26 августа 2011

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

Public Interface IThingThatHasNameAndId 'good name not included
    ReadOnly Property Name As String
    ReadOnly Property Id As Integer
End Interface

Получив интерфейс, вы можете передать массивы типов, реализующих интерфейс, как1004 * или создайте общий метод, взяв T() и ограничив T интерфейс.

0 голосов
/ 26 августа 2011

Создайте базовый класс со свойствами Name и ID, затем вы можете создать метод, который будет принимать любой класс, производный от этого класса.

Public Function TestFunction(Of t As YourBaseClass)(Byval obj As t) As Boolean

   If obj.Name = "Some Name" AndAlso obj.ID = 1 Then

      Return True

   Else

      Return False

   End If

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...