Где контроль ввода принадлежит приложения MVC?

У меня есть приложение MVC, которое получает вход от формы.
Это - форма входа в систему так единственная проверка, которая необходима, должен проверить, непуст ли вход.
Прямо сейчас, прежде чем я передаю его модели, я проверяю его в контроллере.
Действительно ли это - лучшая практика или нет? Это принадлежит модели?

23
задан joshcomley 23 February 2010 в 08:49
поделиться

6 ответов

Я не думаю, что есть официальная проверка, ограничивающая проверку наилучшей практики для любой одной части шаблона MVC. Например, ваш вид может (и должен) сделать некоторую проверку передней передней работы с помощью JavaScript. Ваш контроллер должен также предложить одинаковые типы валидации, а также более валидацию, связанную с бизнес-логикой. Модель также может предложить формы проверки, то есть уютные не позволяющие нулевым значениям.

Есть интересное обсуждение этого на Joelonsoftware .

13
ответ дан 29 November 2019 в 03:04
поделиться

Насколько мне известно, iSimulate не использует никаких взломов. Это код, который запускается в вашем приложении на симуляторе и взаимодействует с устройством по сети. Когда он получает сообщения от устройства (касания, GPS, ускорение), он имитирует эти события, вызывая код вашего приложения, как будто система запустила их.

Например, для получения обновлений местоположения GPS необходимо создать экземпляр CLLocityManager, а затем настроить один из классов в качестве его делегата. Ну, на iPhone Simulator можно вместо этого запустить код, который отправляет фальшивые сообщения делегату. Если вы просто вызовете метод делегата так:

[delegate locationManager:nil didUpdateToLocation:newLocation fromLocation:oldLocation];

Ваш код не должен будет знать, что обновление местоположения поддельное. Если вы хотите получить фантазии, вы можете создать новый класс, который реализует все общедоступные методы CLLocityManager, но который отправляет фальшивые сообщения. (Поскольку Objective-C набирается динамически, он не должен быть подклассом, если он отвечает на все отправляемые сообщения.)

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

#if TARGET_IPHONE_SIMULATOR
   locationManager = (id)[[MyFakeLocationManager alloc] init];
#else
   locationManager = [[CLLocationManager alloc] init];
#endif
-121--1547410-

Возможно, вы могли бы попробовать VTD light Он кажется более эффективным по сравнению с SAX. (Я знаю, что это огромное изменение.)

-121--2733384-

Его бизнес-логика, поэтому нет, он не принадлежит модели.

0
ответ дан 29 November 2019 в 03:04
поделиться

То, что вы ищете, называется «файлы сценариев», определено там: http://www.gnu.org/software/octave/doc/interpreter/Script-Files.html

-121--3303017-

Proxy design образца, я полагаю. Это глупый вопрос, хотя (не размышление о просителе, а о человеке, который задал ему это на собеседовании). Возможно, человек, спрашивающий тебя, не понял, что Последовательность окончательная? Иначе я не могу подумать, зачем они вообще спрашивали.

-121--3224998-

В контроллере имеется свойство ModelState, в которое можно добавить ошибки проверки.

См. этот пример на MSDN .

0
ответ дан 29 November 2019 в 03:04
поделиться

Предполагая, что ваше приложение структурировано, как:

  • Model-View-Controller
  • Сервис
  • Упорство
  • Модель

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

0
ответ дан 29 November 2019 в 03:04
поделиться
Business Logic  -> Controller
Data Validation -> Model
-3
ответ дан 29 November 2019 в 03:04
поделиться

Я долго думал об этом и после попытки провести валидацию как в контроллерах, так и в моделях ... наконец, я пришел к выводу, что для многих моих приложений ... проверка принадлежит модели, а не контроллеру. Почему? Поскольку в будущем одна и та же модель может использоваться различными вызовами других контроллеров или API ... и тогда мне придется повторять процесс проверки снова и снова. Это нарушит DRY и приведет ко многим ошибкам. Плюс к этому с философской точки зрения это модель, которая взаимодействует с базой данных (или другим постоянным хранилищем) и, таким образом, в любом случае является своего рода «последним призывом к алкоголю».

Итак, я выполняю преобразование получения / публикации в контроллере, а затем отправляю необработанные данные в модель для проверки и обработки. Конечно, я часто использую веб-приложения php / mysql, и если вы занимаетесь другими делами, результаты могут отличаться. Я надеюсь, что это поможет кому-то.

6
ответ дан 29 November 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: