// codeart.ru / Офтопик / Про валидацию Форум

Про валидацию rss подписка

Автор: Codeart

Вчера сходил на встречу клуба «Вышиби мозг», послушал доклад на тему «Валидация в Ruby on Rails». Я и раньше не был сторонником Рельсов, а теперь у меня появился еще один повод их не любить. Все потому, что я не согласен с двумя соглашениями этого фреймворка:

1. Код валидируется в модели;

2. Модель должна быть ActiveRecord, иначе валидацию необходимо реализовывать самостоятельно.

На мой взгляд правильнее использовать такие соглашения:

1. Код валидируется в одном классе (месте);
2. Правила валидации определяются по имени параметра и едины для всего проекта;
3. В модель передаются только валидные данные;

На практике данные требования реализуются довольно просто — создается класс ValidDataObject в котором прописываются правила валидаци (не буду приводить содержимое класса, так как его реализация очевидна). Тогда метод контролера выглядит следующим образом:

Public function action_index () {
$u = new Model_User( new ValidDataObject($_POST) );
}

Примечание. Для обработки ошибок валидации нужно использовать исключения. Тогда в коде выше добавится еще try/catch.

Преимущества такого подхода:
1. Облегчается повторное использование правил валидации, да и самих моделей;
2. Все ограничения (параметры валидации) собраны в одном месте и нигде не дублируются (отсюда — их легко править);
3. Задавать ограничения можно когда угодно, не опасаясь пропустить какую-то модель.(лично я никогда не делаю валидацию сразу после создания модели, жду когда модель будет окончательно готова).

Аргумент о том, что только модель знает особенности реализации бизнес-логики не канает, так как валидация — не часть бизнес-логики, а часть технической реализации, т.е. на нее влияют ограничения используемых технологий и ничего более.

Leave a Reply

« »