Мне нужно спроектировать то, что в моей голове кажется простой системой, которая выполняет некоторые вычисления для данных, передаваемых из веб-формы, где данные вводятся пользователем. Сама веб-форма является одноразовой, но внутренний код должен продолжать использоваться в новом проекте, который я скоро начну, который обрабатывает эти вычисления для данных, которые он отправляет и находит сам.
Изначально я думал, что шаблон «Стратегия» хорошо подходит для этих внутренних классов, но когда я начал писать их в пятницу, меня поразило, что в моем коде между моими 4 классами, вероятно, есть 95% дублирования. Хотя я чувствую, что мое текущее решение будет работать хорошо, если когда-нибудь будет решено, что формулы или то, как взаимодействуют данные, должны быть изменены, сейчас дублирование кода делает меня неловким.
Основы таковы:
У нас есть 4 программы продаж, и у каждой из этих программ есть 5 свойств, которые варьируются между каждой программой, но формула для расчета того, что мне нужно знать, одинакова.
В настоящее время у меня есть интерфейс с одной функцией calculate
и 4 класса (по одному для каждой программы), которые реализуют эту функцию. Это было все хорошо, пока я быстро не понял, что calculate
и другие функции, которые я реализовал в своих классах, на 100% одинаковы. Единственное, что отличается в моих 4 файлах — это 5 значений.
Мой первоначальный план разработки заключался в том, чтобы я мог набрать ключ из раскрывающегося списка веб-формы и передать класс, в котором были мои значения, и выполнить расчет. Поскольку я отошел от этого, я вижу, что пропустил эту отметку, и мне нужно пересмотреть свою структуру.
Я провел некоторые исследования по абстрактным классам и даже по шаблону Decorator, но на самом деле, кажется, ничего не щелкает сразу. Мне нравится идея построить его так, чтобы в будущем в него можно было легко включить другие программы продаж, но мне не нравится требовать, чтобы кто-то в основном заходил в мои файлы и копировал файл и корректировал переменные вверху, что кажется очень неаккуратно.
Кажется, простое решение — просто написать один класс Calculator и передать массив этих переменных в зависимости от того, что выбрал пользователь. Возможно, я пытаюсь перегрузить это, но переходить на простое решение тоже не хочется.
Похоже, вы ищете шаблон стратегии;)
Других решений пока нет …