Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2

Programming
Предыдущие части: Часть 1

Добро пожаловать во вторую часть продвинутых советов по написанию кода. В данной статье мы продолжим изучение остальных code smells с реальными примерами и способами исправления ситуации.

— Одержимость примитивами

Этот code smell проявляется всякий раз, когда в своем приложении вы начинаете повсеместно пользоваться примитивными типами данных. Например, целые числа для номеров телефона и строки для валютных символов. Если вы грешите подобным, то взгляните на следующий класс.

Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2 — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

Как вы видите, address в примере определен массивом. Такой подход приведет сразу к двум проблемам: каждый раз, когда нам потребуется адрес, придется его хардкодить. Так почему бы попросту не создать новый класс Address?

Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2 — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

Теперь всякий раз при добавлении/изменении адреса будем обращаться к классу Address. И для добавления новых методов «Свяжитесь с нами» мы кликаем на класс ContactUs. Таким образом получается, что каждый класс обладает единственной ответственностью.

— Оператор switch

Возможно, сейчас вы задались вопросом: чем же так ужасен оператор switch? Конечно же, он не всегда плох, но, как наглядно показывает следующий пример, этот оператор является довольно крупной и непредсказуемой штукой. По мере его разрастания вы не сможете поделить switch на более мелкие методы.

Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2 — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

Всегда помните! Если оператор switch не очень длинный, то его можно оставить. Идеальный пример оператора switch находится внутри фабричного шаблона проектирования.

Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2 — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

— Параллельные иерархии наследования

Иногда я и сам гадаю, являются ли параллельные иерархии наследования порочной практикой разработчика. Для начала, давайте разберемся в самих иерархиях, а затем уже решим: хорошо ли это или плохо.

Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2 — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

Как вы уже заметили из примера выше, каждый раз при создании нового класса Department нужно добавлять и класс Privilege, что приводит нас прямиком к code smell под названием «Стрельба дробью».

— Ленивый класс

Это тот самый класс, который толком ничего не делает. Помните картинку выше?

Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2 — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020
Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2 — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

Мы решили перенести адрес в отдельный класс. Но горячую линию (hotline в коде) мы не трогали, иначе получился бы класс всего с тремя строками. Поэтому всякий раз при обнаружении ленивых классов, смело от них избавляйтесь.

— Временные поля

Такой запах появляется, если у вас есть переменные экземпляра класса, которыми вы пользуетесь лишь изредка. Посмотрите на следующий пример. Вы заметите, что $name и $contactDetails используются только в методе notify().

Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2 — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

Так почему бы не передавать их в качестве параметров метода?

Станьте экспертом в разработке с этими продвинутыми советами по кодировани. Часть 2 — IT-МИР. ПОМОЩЬ В IT-МИРЕ 2020

Специально для сайта ITWORLD.UZ. Новость взята с сайта NOP::Nuances of programming