В поисках шаблона дизайна - PullRequest
0 голосов
/ 11 ноября 2009

У меня есть 80-90 классов, которые являются типом расчета. Но каждый класс использует один метод вычислить, что является одинаковым в каждом в классе. Предметы, которые отличаются в каждом классе, являются переменные экземпляра, используемые внутри метода compute.

Причина, по которой я ищу шаблон, заключается в том, что то, что я делаю, кажется чрезвычайно повторяющимся. Ниже приведен пример только одного вычисления, но может быть до 200 вычислений.

Protected Overrides Sub Compute(ByVal cache As Cache.ClientCache(Of System.Guid), _
                                 ByRef objIsTickBoxATicked As IClientAnswer(Of System.Guid))
     Dim objClientAdviceParas As ClientAdviceParagraphs

     'Get the Client Advice Paragraphs
     objClientAdviceParas = GetTickBoxesFromCache(GetAnonymousCache(cache), _
                                                  CType(cache.Client, Client))
     'Return the value
     objIsTickBoxATicked.BoolValue = _
                CheckTickBox(objClientAdviceParas, m_csClientAdviceParaWelfareBenefitsReferral)

End Sub

Ответы [ 5 ]

4 голосов
/ 11 ноября 2009

Рассматривали ли вы создание одного суперкласса для своих 80-90 классов? Вы можете поместить общую логику в суперкласс.

2 голосов
/ 11 ноября 2009

Я немного смущен. Вы говорите, что метод, который выполняет вычисления, одинаков в каждом классе, но использует разные переменные экземпляра. Означает ли это, что метод всегда имеет одну и ту же сигнатуру, но реализации отличаются? В этом случае все, что вы можете сделать, - это выделить метод и переменные общего члена в суперкласс, но вам все равно придется написать реализацию метода расчета для каждого вычисления. Это не экономит много времени, но позволяет полиморфно использовать вычисления. Как правило, если каждый расчет отличается (даже немного), вам придется выполнять его независимо. Шаблонный метод шаблона помогает, если все вычисления имеют общий шаблон, например ::1001

1. fetch values
2. apply transform
3. sort result

или что-то в этом роде.

2 голосов
/ 11 ноября 2009

Я думаю, вы должны рассмотреть Шаблонный шаблон .

1 голос
/ 11 ноября 2009

Поскольку вы описываете, что только "переменные экземпляра" различаются в ваших классах 80-90, я бы рекомендовал сделать их одним и только одним классом. Именно экземпляры несут разные значения переменных экземпляров, а не классов.

Если код для создания экземпляра сложный, вы можете создать класс Factory с отдельным методом фабрики для каждого случая: createXXX (). Все эти методы будут возвращать новый экземпляр того же класса, инициализированный различными значениями.

0 голосов
/ 14 ноября 2009

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

Используйте функциональный язык.

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