Каково обоснование реформы для того, чтобы не быть в моделях?

Жемчужина реформы выступает за отсутствие валидации в моделях. Вместо этого он защищает их в форме.

Утверждения из моделей

...

Иногда, когда вы по-прежнему сохраняете проверки в своих моделях (чего не следует делать), копируя их в форму, может показаться неправильным. В этом случае вы можете позволить Reform автоматически копировать их.

...

Имейте в виду, что мы не поощряем копирование проверок. Вы должны скорее перенести проверочный код в формы и больше не работать с вашей моделью.

Какое обоснование дает проект Gem для проведения реформ или его авторы за отсутствие проверки в моделях?

1 ответ

Я бы разделил проверки на две разные категории:

  • Целостность данных
  • Бизнес Логика

Целостность данных означает, что модель нельзя использовать без соответствия определенным критериям. Вы должны убедиться, что модель никогда не будет считаться действительной в этом состоянии. Однако в большинстве случаев это касается таких вещей, как уникальность, которые связаны с постоянством. Таким образом, эти ограничения лучше применять на уровне базы данных, а не в модели.

Бизнес-логика, с другой стороны, напрямую связана с функциональными потребностями приложения.

Давайте рассмотрим пример: когда пользователь регистрируется, я хочу, чтобы он только наполнил свою электронную почту, но когда он редактирует свой профиль, я хочу убедиться, что он также вводит свое имя и фамилию.

Учитывая, что валидации принадлежат модели, вам нужно начать загромождать ее условными валидациями. Здесь вы должны проверить перед проверкой, сохранилась ли модель уже или нет, и это поможет. Но добавьте больше форм с различными требованиями, и это быстро станет адом для управления.

Это связано с тем, что логика проверки зависит от контекста приложения (форма заполняется пользователем, конечная точка API вызывается...). Вы хотите проверить, что параметры, требуемые этим контекстом приложения, действительны, а не состояние модели.

Все становится намного проще и удобнее в обслуживании, если вы настраиваете различные наборы проверки для каждого контекста. Это приводит к немного большему количеству кода для написания, но намного более чистой и понятной логике.

Другие вопросы по тегам