Антипаттерны и запахи

Существуют и антипаттерны, которые или сами нарушают SRP, или усложняют следование принципу.

Божественный объект

Божественный объект — это сущность, которая отвечает за слишком много.

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

Это затрудняет рефакторинг, тестирование и внесение изолированных изменений в код.

Синглтон

Синглтон — это паттерн, при котором в приложении существует только один экземпляр какого-то класса. Существующий синглтон гарантирует, что все новые созданные объекты будут ссылаться на него.

С точки зрения SRP это смешение ответственностей. Потому что синглтон не только выполняет свою основную функцию, но ещё и проверяет, не существует ли уже созданных экземпляров.

Проблем у этого паттерна несколько:

  • он глобален — когда нарушается инкапсуляция состояния, повышается вероятность непредсказуемых нежелательных изменений;
  • излишне имплицитен — трудно заранее понять, как себя поведёт объект в какой-то ситуации;
  • трудно тестируется — глобальный объект хранит большое количество данных и может находиться в большом количестве различных состояний, из-за чего модульные тесты могут показывать непредсказуемые результаты.

Смешение архитектурных слоёв

Паттерн Model-View-Controller, MVC подразумевает три сущности: модель, представление и контроллер. Модель отвечает за хранение данных; представление — за их отображение; контроллер — за преобразование и обработку.

Смешение слоёв — это неправильное распределение или размазывание ответственностей между слоями. Оно может приводить:

  • к разрастанию контроллера, что делает его код трудным для понимания;
  • появлению логики внутри модели, что затрудняет переиспользование модели.

Материалы к разделу

Вопросы