В продолжение моей последней статьи 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.