SRP
Принцип
У каждого класса/модуля/функции должна быть только одна причина для изменения.
Пример из жизни: кофемашина. Если она варит кофе, сама себя чистит, сама заказывает зёрна через интернет, печатает чеки - то это плохо! Если изменится способ печати чеков - придётся менять кофемашину. Если поставщик зёрен поменяет API - снова менять кофемашину. Правильно: кофемашина только варит кофе. Чисткой занимается отдельный сотрудник, заказом зёрен — менеджер, печатью чеков — кассовый аппарат.
Пример антипаттерна в коде: SmartDevice::print_state() и хранит температуру, и выводит её в консоль:
Если потом потребуется писать отчёты в файл, отправлять по сети, выводить на веб-страницу, логировать в JSON, то придётся менять сам доменный тип, и это плохо!
Правильно: SmartDevice только хранит данные и отвечает за свою бизнес-логику. А за вывод отвечает кто-то другой.
Антипаттерн без Display:
Паттерн SRP с Display: