Шаблон стратегии со стратегиями содержит похожий код
В большинстве примеров шаблон стратегии обычно подходит для алгоритмов сжатия / алгоритмов кодеков, где этот алгоритм может иметь совершенно другой код.
Однако, в моем случае, алгоритмы статистики, которые я хочу реорганизовать в шаблон стратегии, имеют 50% -ый код, похожий или точно такой же. Мне было интересно, как люди справляются с этим? Если я использую шаблон стратегии, может быть скопировано около 50% кода, что нежелательно. Если не рефакторинг, код заканчивается множеством наборов if-else для обработки различных типов статистических алгоритмов. Как оценить компромисс? Какие могут быть другие возможные решения?
2 ответа
Конечная цель заключается не в том, чтобы уменьшить как можно больше дублирования кода. Цель состоит в том, чтобы сделать код поддерживаемым. Вы должны спросить себя, не облегчит ли внедрение этого дублирования реализацию стратегии или сложнее ее поддерживать.
Если уменьшение дублирования затрудняет обслуживание кода, сохраните дублирование, но, возможно, найдите другой способ смягчить проблему (документирование и тестирование - это два возможных способа).
Если уменьшение дублирования облегчит поддержку кода, подумайте о возможных способах удаления дублирования (делегирование, как в случае с Strategy and Decorator; наследование, как в случае с Template Template и т. Д.).
Вы можете использовать Template Method, если это проще, но также существует большая вероятность, что с помощью наследования Вы можете получить свои конкретные стратегии из общего базового класса, содержащего большую часть общего кода.