Рекомендации по шаблону проектирования для расчета цен

#oop #design-patterns #uml

#ооп #шаблоны проектирования #uml

Вопрос:

У меня есть вопрос о наилучшем практическом / шаблоне проектирования. Я работаю над системой диспетчеризации, в которой мне нужно рассчитать цену.

В настройках системы администратор может управлять 8 различными правилами ставок. Существует один для минимальной платы, парковки, платы за проезд, … .

Каждое правило может быть активировано и деактивировано, и каждое правило имеет свои собственные параметры, например, правило «парковка» имеет параметры «цена», «НДС», «цена за час или фиксированная цена», …

Я думал об использовании шаблона стратегии или шаблона моста, но, по-моему, ни один из них не подходит.

Другим решением было бы простое наследование без использования интерфейса.

Я кое-что смоделировал, но я не на 100% доволен результатом:

https://www.dropbox.com/s/jllb8h0671ssq8u/RateRule-Pattern.png

Ответ №1:

Звучит очень разумно для меня… Каким бы шаблоном вы его ни называли, я вижу большой смысл в вашей идее — сбор ParkingCalculator, TollCalculator и т. Д. С Общим интерфейсом. Это упрощает добавление дополнительных типов платежей, если они появляются по пути, и позволяет заменить некоторые элементы (например, разные правила парковки). Если происходит последнее, то это действительно подпадает под классическое определение «Стратегии».

Лично я бы также спрятал все это за высокоуровневым интерфейсом «calculateTotal» — текущая реализация — «итерация по коллекции калькуляторов», но остальная часть системы не должна возражать, если это изменится (например, если правила станут настолько сложными, что потребуется дерево или вызов RESTкакой-либо внешней службе Министерства транспорта).