Код, который заставляет думать: неговорящие имена, плохие абстракции, неправильные структуры данных, сильная зависимость от контекста — плохой код (при этом важно не путать лёгкость и простоту).
YAGNY – You Ain’t Gonna Need It – Вам это не понадобится! Его суть в том, чтобы реализовать только поставленные задачи и отказаться от избыточного функционала
SOLID – когда при написании кода используется несколько принципов вместе, то это значительно облегчает дальнейшую поддержку и развитие программы
CQS – Command-query separation – метод должен быть либо командой, выполняющей какое-то действие, либо запросом, возвращающим данные, но не одновременно
должен обладать ограниченным знанием о других модулях:
знать о модулях, которые имеют «непосредственное» отношение к этому модулю.
должен взаимодействовать только с известными ему модулями «друзьями», не взаимодействовать с незнакомцами. обращаться только к непосредственным «друзьям».
Single level of Abstraction Principle (SLAP) – Принцип единого уровня абстракций – В функции не должны сочетаться разные уровни абстракции. Например, функция для проверки формы не должна выполнять вызовы ввода/вывода
Инвариант – логическое выражение, определяющее непротиворечивость состояния. Пример: Cравнение неприведенной и приведенной рациональных дробей должно происходить корректно: makeRational(2, 4) = makeRational(8, 16), т.е. необходимо, например, в конструкторе рациональной дроби makeRational приводить ее к нормальной).
Техника мемоизации – запоминание возвращенных значений функций, для для исключения их повторного расчета для переданных аргументов
Защита данных от прямого воздействия, в обход интерфейсных функций. В PHP за это отвечают модификаторы доступа к свойствам объектов public, protectedи private