Если у меня есть список финансовых транзакций, мне нужно выполнить список правил проверки для этих транзакций. Например, у меня есть транзакция для покупки продукта, однако сначала мне нужно проверить, что на счете в транзакции достаточно свободных средств, что продукт не распродан и т. Д. В результате этих многих правил транзакция будет помечен как отклоненный, а также должен быть указан код ошибки.
Естественно, я думаю о том, чтобы привести свои правила в соответствие с интерфейсом, позволяющим исполняемому коду прокручивать правила, выполняющие каждое из них, до тех пор, пока первый не отклонит транзакцию.
Каждое правило должно быть настроено с параметрами (например, ValidateMinimumBalance должен знать, что минимальный баланс = 30). Результат выполнения правила может быть простым: установить код отклонения для объекта транзакции и код ошибки; или это может быть так же сложно, как автоматическое изменение нескольких других свойств транзакции.
Мое базовое понимание шаблонов проектирования указывает мне на шаблоны «Стратегия» или «Команды», но я не совсем уверен, какой из них лучше подходит для этого сценария.
Шаблон команды
- Каждая команда реализует своего рода интерфейс IValidate
- Конструктор команды примет экземпляр транзакции в качестве получателя, чтобы иметь возможность прочитать / проверить транзакцию, а также изменить ее аспекты. Конструктор также примет массив пар ключ / значение в качестве параметров для логики проверки.
Когда я пытаюсь представить, как шаблон стратегии соответствует этому сценарию, он выглядит очень похоже. В большинстве примеров стратегия представляет собой простой объект с одним методом, однако в моем случае стратегии потребуется ссылка на транзакцию, а также параметры проверки.