Источник: блог Сергея Теплякова.
Date: 2019-09-08
Anti-SRP: Чрезмерная любовь к SRP ведет к обилию мелких классов, и в итоге логика размывается между ними.
Зачем: Борьба со сложностью
Объяснение: У каждого класса должна быть одна причина для изменения
Пример нарушения: 1. WCF - бизнес-логика смешана со способом репрезентации. 2. Некий класс, который парсит json-строку и анализирует его ___
Anti-SRP: Можно получить фабрику-фабрик и излишние уровни абстракции.
Зачем: Ограничить изменение максимально минимальным кол-вом модулей/классов.
Объяснение: Программные сущности должны быть открыты для расширения, но закрыты для модификации.
Закрытость - стабильность интерфейсов. Открытость - возможность переопределять в дочерних классах логику или изменять реализацию интерфейсов. Пример нарушения: Размазывание информации об иерархии типов по всему проекту. ___
Anti-SRP: Либо слишком много наследования, либо полное его отсутствие
Зачем: Реализовать подтипы правильно
Объяснение: Должна быть возможность подставить вместо базового типа любой его подтип.
Для корректной реализации отношения “Является” подтип может ослаблять предусловия и усиливать постусловия (требовать меньше и гарантировать больше), при этом инварианты базового класса должны выполняться наследником. В противном случае такой нарушающий наследник может привести к непредвиденному поведению. ___
Anti-SRP: Слишком много интерфейсов с размазанной логикой
Зачем: Предоставление удобного интерфейса вне зависимости от клиентов