У меня есть приложение MVC, которое получает вход от формы.
Это - форма входа в систему так единственная проверка, которая необходима, должен проверить, непуст ли вход.
Прямо сейчас, прежде чем я передаю его модели, я проверяю его в контроллере.
Действительно ли это - лучшая практика или нет? Это принадлежит модели?
Я не думаю, что есть официальная проверка, ограничивающая проверку наилучшей практики для любой одной части шаблона MVC. Например, ваш вид может (и должен) сделать некоторую проверку передней передней работы с помощью JavaScript. Ваш контроллер должен также предложить одинаковые типы валидации, а также более валидацию, связанную с бизнес-логикой. Модель также может предложить формы проверки, то есть уютные не позволяющие нулевым значениям.
Есть интересное обсуждение этого на Joelonsoftware .
Насколько мне известно, 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-Его бизнес-логика, поэтому нет, он не принадлежит модели.
То, что вы ищете, называется «файлы сценариев», определено там: http://www.gnu.org/software/octave/doc/interpreter/Script-Files.html
-121--3303017-Proxy design образца, я полагаю. Это глупый вопрос, хотя (не размышление о просителе, а о человеке, который задал ему это на собеседовании). Возможно, человек, спрашивающий тебя, не понял, что Последовательность окончательная? Иначе я не могу подумать, зачем они вообще спрашивали.
-121--3224998-В контроллере имеется свойство ModelState, в которое можно добавить ошибки проверки.
См. этот пример на MSDN .
Предполагая, что ваше приложение структурировано, как:
Пользовательский ввод придет к вашему контроллеру, и вы будете использовать услуги в службе слой, чтобы подтвердить его.
Business Logic -> Controller
Data Validation -> Model
Я долго думал об этом и после попытки провести валидацию как в контроллерах, так и в моделях ... наконец, я пришел к выводу, что для многих моих приложений ... проверка принадлежит модели, а не контроллеру. Почему? Поскольку в будущем одна и та же модель может использоваться различными вызовами других контроллеров или API ... и тогда мне придется повторять процесс проверки снова и снова. Это нарушит DRY и приведет ко многим ошибкам. Плюс к этому с философской точки зрения это модель, которая взаимодействует с базой данных (или другим постоянным хранилищем) и, таким образом, в любом случае является своего рода «последним призывом к алкоголю».
Итак, я выполняю преобразование получения / публикации в контроллере, а затем отправляю необработанные данные в модель для проверки и обработки. Конечно, я часто использую веб-приложения php / mysql, и если вы занимаетесь другими делами, результаты могут отличаться. Я надеюсь, что это поможет кому-то.