Skip to content

Latest commit

 

History

History
65 lines (47 loc) · 3.83 KB

File metadata and controls

65 lines (47 loc) · 3.83 KB

Чистый код по Р. Мартину

Классы и переменные - существительные, методы и интерфейсы - глаголы.


Объекты и структуры

Название - существительное по состоянию классу(то, что он содержит).

Отличие между объектом и структурой данных заключается в том, что в объекте содержится состояние и поведение, в структуре данных содержится только состояние.

Закон Деметры: никакой объект не должен раскрывать свою внутреннюю структуру тем, кто к нему обращается. Все манипуляции с объектом должны содержаться в методах данного объекта.


Форматирование класса

  1. Класс;
  2. Документация по классу;
  3. Поля по убыванию важности, начиная с id;
  4. Конструкторы;
  5. public методы;
  6. private методы;

Добавлять пропуски между концепциями (блоками методов)


Методы

  • Один метод - одна задача, один уровень абстракции на метод;
  • Выносить код из switch в enum;
  • Описательные имена (глаголы);
  • Чем меньше входных параметров - тем лучше. Если у метода больше 3 аргументов - создавать параметр Object (Например, объединить dateStart и dateEnd в объект DateRange, после чего для объекта реализовать методы;
  • Клиентский код не должен создавать флаги, влияющие на серверный код (нарушается инкапсуляция и читабельность кода);
  • Менять объект может только void;
  • Функция, возвращающее булево значение, имеет приставку is.


Комментарии

  • Legal Info (автор, дата, копирайт);
  • Контринтуитивное поведение или нелогичное поведение системы при определенном бизнес-процессе;
  • Комментарий к запутанной части кода (перед или внутри RegEx, или запутанная бизнес-логика);
  • Предупреждение о последствиях (если это удалить, кусок кода работать не будет; не удалять, иначе будут такие последствия);
  • TODO;
  • Javadoc - оформление документации к коду. Документация пишется только по public методам;
  • Использовать метод / переменную вместо комментария (увеличение переменной на определенное значение вывести в метод, в названии пояснить, что связано с бизнес-задачей);

Обработка ошибок (Error handling)

  • Использовать исключения, а не коды возврата;
  • Ловим только Exceptions;
  • Весь код должен входить в блок try-catch-finally;
  • Прописывать для каждого слоя свое исключение (UiException, BusinessLogicException),