Полиморфизм (Polymorphism)¶
Polymorphism в GRASP говорит: если поведение зависит от варианта, лучше распределить его по реализациям, а не держать в длинной цепочке условий.
Важно: это не то же самое, что полиморфизм как принцип ООП. В GRASP это уже архитектурное правило распределения ответственности, которое построено на полиморфизме как механизме языка и объектной модели.
Опора на ООП¶
Polymorphism напрямую опирается на полиморфизм и интерфейсы: разные реализации отвечают на один и тот же запрос по-своему.
Что показывает пример на 1С¶
DiscountCalculatorработает с политикой скидки через общий контракт.RetailDiscountPolicyиWholesaleDiscountPolicyреализуют разные правила.- Контекст не содержит длинного
Если ... ИначеЕслипо типу клиента.
Пример¶
Где полезен в 1С¶
- для разных правил расчета, обмена, печати и маршрутизации;
- когда ветвления по типам уже начинают дублироваться;
- как принцип, на котором потом строятся
Strategy,Stateи похожие паттерны.
Когда принцип применяют неправильно¶
- если вариантов один-два и они почти не меняются;
- если полиморфизм вводится без ясного общего контракта;
- если внешняя система все равно требует большого условного диспетчера.