В MVP где писать валидации

в шаблоне Model-View-Presenter, где мы должны писать проверки пользовательского ввода.

3 ответов


доменные правила/проверки должны быть в модели. У тебя может быть модель.validate (), чтобы сообщить вам, если правила не нарушаются. Посмотрите на классы модели Rails (ActiveRecord) для хорошей реализации этой концепции.

представление должно затруднить ввод пользователем недопустимого ввода. Таким образом, класс ошибок ввода "ввод строки для числового значения" должен быть сокращен до достижения презентатора. Может быть некоторое дублирование проверок между моделью и вид. Например. AttributeX должен находиться в диапазоне от 1-100. Это должно быть подтверждено в модели.. в то же время вы можете использовать слот в spinner в пользовательском интерфейсе с диапазоном minValue и maxValue равным 1-100.


Я обычно держу свой взгляд полностью чистым, никакой логики там. Но я не занимаюсь веб-разработкой. В ситуациях Ajax-ish вы можете захотеть иметь проверку на стороне клиента, которая должна идти в представлении.

проверка бизнес-логики входит в модель. С проверкой бизнес-логики я имею в виду такие вещи, как проверка минимального размера заказа и т. д.

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

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


ведущий....

представление должно иметь "виджеты", которые предотвращают недопустимый ввод, где это возможно.