Когда использовать паттерн Особый случай?

В книге Чистый код в главе Обработка ошибок, есть упоминание паттерна ОСОБЫЙ СЛУЧАЙ. Автор предлагает вместо возвращения NULL, выдать исключение, либо возвращать объект особого случая. Вопрос: если в проекте достаточно много проверок на null; Стоит ли абсолютно для каждого класса, делать подкласс с особым случаем? Не является ли это overengineering? Если нельзя так делать, то можно, пожалуйста, когда все таки стоит использовать данный паттерн, чтобы было эффективно


Ответы (1 шт):

Автор решения: Rainbow

Можешь орентироваться на следующие признаки:

  1. Часто встречающиеся проверки. Если в коде очень много мест, где выполняется проверка на null для определенного типа объекта, и этот код разбросан по различным частям системы, это может быть признаком того, что стоит ввести особый случай.
  2. Семантика. Если особый случай имеет четкую семантику в предметной области (например, пустой список, отсуствующий пользователь и т.д.), это может улучшить читаемость и понимание кода.
  3. Избавление от условных операторов. Если возвращаемый "особый" объект может успешно выполнить то же поведение, что и реальный объект, без необходимости проверки на null (или другой проверки), это может упростить и улучшить код.

Когда скорее всего не стоит использовать этот паттерн:

  1. Не всегда нужен особый объект. Если проверка на null встречается только в одном или двух местах, создание особого объекта может быть избыточным.
  2. Вычислительная стоимость. Создание и управление особыми объектами также имеет свою цену, особенно если они сложные или требуют дополнительных ресурсов. Поэтому создавать для каждого интерфейса особый случай, наверное, не очень хорошая идея.
  3. Понимание кода. Вводя в код особые объекты, мы можем увеличить сложность понимания кода. Либо просто запутать свой код. Поэтому здесь нужно взвешивать: принесёт ли это какую-то пользу? Сделает код проще или наоборот запутает его?
→ Ссылка