Простой чистый код — часть 2

В продолжение моей последней статьи Clean Code Made Simple — Part 1, в этой статье я продолжу знакомить вас с техниками из книги Роберта К. Мартина Clean Code.

#6 Скрытие данных

Как вы думаете, какой из приведенных ниже фрагментов кода лучше продуман?

1)

interface Vehicle {
    public function getFuelTankCapacityInGallons();
    public function getGallonsOfGasoline();
}
Вход в полноэкранный режим Выход из полноэкранного режима

2)

interface Vehicle {
    public function getPercentFuelRemaining();
}
Войти в полноэкранный режим Выйти из полноэкранного режима

В обоих приведенных выше случаях второй вариант предпочтительнее. Мы не хотим раскрывать детали наших данных настолько, насколько это возможно. Скорее, мы хотим выразить наши данные в абстрактных терминах. Необходимо серьезно подумать о том, как лучше представить данные, которые содержит объект. Худший вариант — простое добавление геттеров и сеттеров.

Поэтому в любой ситуации, когда уместно скрыть данные объекта, вы можете это сделать.

#7 простых правил проектирования

Кент Бек ввел эти 4 правила в качестве основных критериев для лучшего проектирования программ:

  • Выполняет все тесты
  • Не содержит дублирования
  • Выражает намерение программиста
  • Минимизирует количество классов и методов

В попытке сделать наши классы и методы маленькими, мы можем создать слишком много крошечных классов и методов. Мы также должны держать количество функций и классов на низком уровне. Это четвертое правило простых правил проектирования Кента, которое важнее других.

#8 Функции, раскрывающие намерения

Как вы думаете, как можно улучшить этот фрагмент кода?

public function getFlaggedCells() {

    $flaggedCells = new List();

    foreach ($cells as $cell) {
        if ($cell[STATUS_VALUE] == 1) {
            $flaggedCells->add($cell);
        }
    }

    return $flaggedCells;
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Мы можем написать функцию, раскрывающую намерения (назовем ее isFlagged), чтобы скрыть магические числа. В результате получится новая версия функции:

public function getFlaggedCells() {

    $flaggedCells = new List();

    foreach ($cells as $cell) {
        if ($cell->isFlagged())
            $flaggedCells->add($cell);

    return $flaggedCells;
}
Вход в полноэкранный режим Выход из полноэкранного режима

#9 Написание тестов приводит к улучшению дизайна

Системы, которые не поддаются тестированию, не могут быть проверены. Возможно, систему, которую невозможно проверить, никогда не следует развертывать. К счастью, создание тестируемых систем подталкивает нас к дизайну, в котором наши классы небольшие и одноцелевые. Написание тестов приводит к улучшению дизайна.

#10 Разделение забот

Как бы вы рекомендовали направить стрелки, чтобы отделить конструирование от использования?

Main             Application



Builder
Вход в полноэкранный режим Выход из полноэкранного режима

Направление стрелок должно быть следующим:

            run
  Main  --------->  Application
   |
   | build and construct
  |/
Builder
Войти в полноэкранный режим Выход из полноэкранного режима

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

Хорошо. Вот и все для этой части. Вы можете присоединиться к моему каналу Telegram, чтобы получать уведомления о последних публикациях. Также вы можете следить за мной в Twitter и LinkedIn.

Оцените статью
devanswers.ru
Добавить комментарий