2009-12-02 2 views
1

Вопрос прост. Где я должен поместить процесс проверки формы в шаблон проектирования mvc (Zend, Symphony, Cakephp, Codeigniter). Я задаю этот вопрос, потому что у меня есть свои собственные рамки. Но я не могу решить, где я должен обрабатывать проверку формы. Например, я могу писать инструкции if в контроллере, но это делает контроллер «fat», или я могу добавлять верификационные утверждения в функцию модели (в User :: register (,,)). Конечно, это не очень сложно, но моя цель - понять, как они поступают в приложениях уровня предприятия.Где лучше всего проверять данные формы?

+0

Аналогичный вопрос здесь http://stackoverflow.com/questions/223097/where-do-you-record-validation-rules-for-form-data-in-a-web-application – blank

+0

Очень другой вопрос ... –

ответ

2

Если вы рассматриваете Модели в MVC как то, что мы в мире .NET называем ViewModels (и, как я полагаю, называются «Модели презентаций в другом месте») вместо «Модели доменов», модель будет отличным местом для добавления проверки/проверки.

Это позволит вам повторно использовать логику проверки везде, где вы повторно используете Модель, и это имеет смысл, поскольку Модель будет инкапсулировать логику проверки вместе с данными. Это звучит как высокая сплоченность для меня.

Как проверка работоспособности, структура ASP.NET MVC, похоже, движется в этом направлении. Поскольку вопрос помечен как «php», я не уверен, что этот последний фрагмент информации усиливает или ослабляет аргумент.

+0

Неправильное использование термина «сцепление»? – paxos1977

+1

@ceretullis: Я так не думаю, согласно определению Википедии: http://en.wikipedia.org/wiki/Cohesion_(computer_science) –

1

Валидация - Контроль ввода. MVC означает Model View Controller, поэтому проверка должна выполняться в контроллере.

Общие проверки, такие как isInt(), isStr(), isEmailAddress, isFloat() и т. Д. И т. Д., Могут/должны быть помещены в базовый контроллер. Тогда у вас могут быть субконтроллеры для указанных моделей (сопоставление с вашей базой данных). Затем эти субконтроллеры распространяются от базового контроллера.

+1

-1 Я думаю, вы смешиваете семантическое сходство Control и Controller с тем, что подразумеваете, что должна быть структурная эквивалентность. –

0

Существует несколько мест, где может быть выполнена валидация.

Прежде всего, клиентская сторона или серверная сторона: часто рекомендуется выполнять предварительную проверку на стороне клиента (например, только разрешенные номера!) Перед отправкой битов по кабелю. Проверка на стороне сервера всегда обязательна в качестве требования безопасности/целостности данных.

Требования к лицевой стороне и модели: конкретная форма может не знать требования модели к связанным объектам данных (например, если существует правило бизнес-логики, значение 3 в определенном поле не должно присутствовать, если число связанных записи меньше 5) - единственное место, которое будет знать, что является моделью.

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