Это одна из серии статей с подробным описанием ключевых моментов, которые я обнаружил, читая «Чистый код». Эта статья посвящена операторам Switch/When.

Раскрытие информации. Пункты, изложенные в этой серии статей, не резюмируют содержание книги. Они просто обрисовывают в общих чертах некоторые ключевые моменты, которые я обнаружил, и которые такие программисты, как я, могут найти в качестве полезного учебного материала. Я бы посоветовал вам сначала прочитать книгу, а затем обратиться к этой серии, чтобы закрепить свои знания, как это сделал я.

Операторы Switch/When

Трудно заставить оператор when делать что-то одно. По своей природе операторы when всегда выполняют Nколичествоопераций. Используйте следующий оператор when для расчета стоимости различных типов транспортных средств:

Есть несколько проблем с этой функцией (и операторами when в целом). Во-первых, это нарушает принцип единой ответственности, поскольку для его изменения есть несколько причин. Во-вторых, он нарушает принцип открытого и закрытого, потому что он должен меняться всякий раз, когда добавляется новый тип (разумно предположить, что может быть добавлен новый тип транспортного средства, например, мопед). Наконец, что более важно, существует неограниченное количество функций, которые будут иметь одинаковую структуру. Например, у нас может быть следующее, чтобы вернуть среднюю цену автомобиля:

Решение этой проблемы состоит в том, чтобы похоронить оператор when в базе абстрактной фабрики. Фабрика будет использовать оператор when для создания соответствующих экземпляров производных от Vehicle, а различные функции, такие как getAveragePrice, calculateCost и calculateDailyMaintenance, будут полиморфно диспетчеризированы через интерфейс Vehicle.

Теперь это много громких слов, так что давайте перейдем к примеру:

Теперь всякий раз, когда мы хотим получить доступ к информации определенного Vehicle, мы используем функции интерфейса Vehicle.