2016-09-02 2 views
0

Прошу прощения, если аналогичный вопрос был задан, я не смог найти ничего подобного.Почему before_save считается плохим?

Таким образом, может кто-нибудь сказать мне, почему before_save особенно условный можно считать плохой, пожалуйста?

before_save :something, if: Proc.new { self.abc == 'hello' } 

Поэтому я понимаю, почему проверка иногда подходит гораздо лучше, однако, что я не понимаю, почему некоторые люди думают, что обратные вызовы могут быть плохо использовать, и они заставляют вас не писать только валидации, но не делают они условные.

Я лично считаю, что проблема может быть гораздо более сложной, поскольку это изменение может повлиять на уже существующие записи, и поэтому можно реализовать условный валидатор или предоставить if для before_save, если вы планируете модифицировать данные только в определенном случае. Почему некоторые люди думают, что это не нормально? Может ли кто-нибудь помочь мне в этом?

спасибо!

ответ

1

Я считаю, что единственным недостатком before_save или before_validation, когда он не понял, или используется должным образом

  • Что следует использовать только после того, как тщательно обсуждает, что такие обратные вызовы действительно означало быть использование глобальной мудр для всех записей (рассмотрите также старые записи, которые уже хранятся в БД)
  • Что, если обратные вызовы применимы только к определенным конкретным записям или условиям, тогда лучше не загрязнять модель и просто реализовать логику вне модель.
  • Что, если обратные вызовы меняют состояние, это могут быть записи или другие записи, тогда имена этих обратных вызовов должны быть явно указаны и что разработчик должен знать и понимать, что они не должны иметь непреднамеренных эффектов.
  • Это, если обратные вызовы не изменяют состояние, тогда это немедленно безопасно использовать, поскольку это гарантирует неизменность и идемпотентность.
  • Для того, чтобы порядок обратных вызовов был важным, и что ограниченное понимание того, что происходит, может оставить разработчика/нового разработчика писать код с непреднамеренными эффектами и может не работать все время.
  • Это before_save и before_validation разные, и что следует разработчик понял, что некоторые обратные вызовы предназначены для использования в качестве before_save, а некоторые, как и before_validation

Помимо этого, я не вижу никаких проблем с before_save поскольку он может потенциально очистить и разбить логику кода и позволяет повторно использовать, особенно если у вас есть подклассы модели.

Просто мои непосредственные мысли по этому вопросу ...

0

Использование обратных вызовов стандартны Rails практика! При правильном использовании они являются большими СУХОЙ помощниками, когда дело доходит до поддержания целостности данных. Обратные вызовы в значительной степени используются для ввода данных форматирования (например, удаление пробелов или тире из поля номера мобильного телефона), где ответ с ошибкой посредством проверки просто срывает пользователя. Используйте проверки для обработки случаев, которые вы не можете предсказать, или данные, которые в противном случае были бы непредсказуемыми, и обратные вызовы в другом месте (например, удаление электронной почты перед сохранением).

Смежные вопросы