#oop #design-patterns #uml
#ооп #шаблоны проектирования #uml
Вопрос:
У меня есть вопрос о наилучшем практическом / шаблоне проектирования. Я работаю над системой диспетчеризации, в которой мне нужно рассчитать цену.
В настройках системы администратор может управлять 8 различными правилами ставок. Существует один для минимальной платы, парковки, платы за проезд, … .
Каждое правило может быть активировано и деактивировано, и каждое правило имеет свои собственные параметры, например, правило «парковка» имеет параметры «цена», «НДС», «цена за час или фиксированная цена», …
Я думал об использовании шаблона стратегии или шаблона моста, но, по-моему, ни один из них не подходит.
Другим решением было бы простое наследование без использования интерфейса.
Я кое-что смоделировал, но я не на 100% доволен результатом:
https://www.dropbox.com/s/jllb8h0671ssq8u/RateRule-Pattern.png
Ответ №1:
Звучит очень разумно для меня… Каким бы шаблоном вы его ни называли, я вижу большой смысл в вашей идее — сбор ParkingCalculator, TollCalculator и т. Д. С Общим интерфейсом. Это упрощает добавление дополнительных типов платежей, если они появляются по пути, и позволяет заменить некоторые элементы (например, разные правила парковки). Если происходит последнее, то это действительно подпадает под классическое определение «Стратегии».
Лично я бы также спрятал все это за высокоуровневым интерфейсом «calculateTotal» — текущая реализация — «итерация по коллекции калькуляторов», но остальная часть системы не должна возражать, если это изменится (например, если правила станут настолько сложными, что потребуется дерево или вызов RESTкакой-либо внешней службе Министерства транспорта).