Недавно я прочитал статью о том, как «избавиться от операторов if/else с помощью ООП».

О, подумал я, наверное, есть карта/ассоциативный массив для сопоставления ввода с выводом вместо переключателя или вложенных ifs. Прохладный! Давайте проверим это. Интересно, что такое бит ООП…

Конечно, наш старый друг полиморфизм. Оказывается, совет состоял в том, чтобы написать большой if/else и возвращать разные классы для каждого условия. Классы расширяют один и тот же родитель, поэтому вызывающая сторона может использовать магию полиморфизма. (Я снова выделил жирным шрифтом, чтобы вы не пропустили).

Это не избавило от каких-либо операторов if/else… Но что меня действительно удивило, так это код, поддерживающий все классы и подклассы. Так много! Расширение и переопределение, конструкторы, общедоступные и частные и, о боже.

Конечно, я не мог не переписать код попроще; одна функция и одна карта (и парочка перечислений 😀).

Оригинальный пример был написан для отображения разными цветами курсов, продаваемых в интернет-магазине. Также был добавлен слой для отображения разных цветов в зависимости от ценового порога.

Проблема может быть решена просто путем рассмотрения того, как нужно манипулировать данными; зачем пытаться моделировать мир с помощью классов и как они соотносятся друг с другом? Зачем писать весь этот код!? 🍲

Тесты

Пример

Демонстрация getColourMap: https://bitbucket.org/gabrielmccallin/course-oop-attack