Чудове запитання!
Що стосується всесвітньої розробки веб-сайтів, що робити, якщо ви також запитуєте наступне?
"Якщо неправильний вхід користувача надходить на контролер з користувальницького інтерфейсу, чи повинен контролер оновлювати Вигляд у вигляді циклічного циклу, змушуючи команди та вхідні дані бути точними перед їх обробкою ? Як? Як огляд оновлюється у звичайному режимі умови? Перегляд щільно пов'язаний з моделлю? Чи є коректна логіка введення користувачем основної ділової логіки моделі, чи вона є попередньою для неї і, таким чином, повинна відбуватися всередині контролера (тому що вхідні дані користувача є частиною запиту)?
(Насправді, чи може, чи потрібно, одна затримка створення моделі, поки не буде отримано хороший внесок?)
На мою думку, моделі повинні керувати чистою та незайманою обставиною (наскільки це можливо), не обтяженою базовою валідизацією вхідного запиту HTTP, яка повинна відбуватися до інстанціфікації моделі (і, безумовно, до того, як модель отримає вхідні дані). Оскільки управління даними про стан (постійними або в іншому випадку) та співвідношеннями API є світом моделі, нехай у контролері відбувається перевірка основного введення запиту HTTP .
Підбиття підсумків.
1) Підтвердьте свій маршрут (проаналізований за URL-адресою), оскільки контролер та метод повинні існувати, перш ніж все інше може йти вперед. Це неодмінно має відбутися в царині переднього контролера (клас маршрутизатора), перш ніж перейти до справжнього контролера. Дух. :-)
2) У моделі може бути багато джерел вхідних даних: HTTP-запит, база даних, файл, API та так, мережа. Якщо ви збираєтеся розмістити всю модель перевірки вхідних даних у моделі, тоді ви вважаєте перевірку введення запиту HTTP частиною бізнес-вимог до програми. Справа закрита.
3) Тим не менш, короткозоріше переживати за рахунок екземплярів безлічі об'єктів, якщо вхід HTTP-запиту не є корисним! Ви можете знати, чи добре ** введення запиту HTTP ** ( що надійшло із запитом ), перевіривши його перед тим, як ініціювати модель та всі її складності (так, можливо, ще більше валідаторів для вхідних / вихідних даних API та БД).
Перевірте наступне:
a) Метод запиту HTTP (GET, POST, PUT, PATCH, DELETE ...)
б) Мінімальні елементи керування HTML (чи вистачає?).
в) Максимальне керування HTML (у вас занадто багато?).
г) Правильні елементи керування HTML (у вас є правильні?).
e) Вхідне кодування (як правило, це кодування UTF-8?).
f) Максимальний розмір введення (чи будь-який вхід дико виходить за межі?).
Пам'ятайте, що ви можете отримати рядки та файли, тому очікування моделі інстанції може стати дуже дорогою, оскільки запити потрапляють на ваш сервер.
Те, що я описав тут, потрапляє під намір запиту, що надходить через контролер. Якщо пропустити перевірку наміру, ваша програма стає більш вразливою. Намір може бути лише добрим (граючи за вашими основними правилами) або поганим (виходячи за рамки ваших основних правил).
Намір для HTTP-запиту - це пропозиція, яка повністю або нічого. Все проходить, або запит недійсний . Не потрібно нічого надсилати моделі.
Цей базовий рівень наміру HTTP-запиту не має нічого спільного з регулярними помилками введення користувача та валідацією. У моїх програмах HTTP-запит повинен бути дійсним п’ятьма способами, щоб я його шанував. При поглибленому захисному мовленні ви ніколи не переходите до перевірки введення користувачем на стороні сервера, якщо будь-які ці п'ять речей виходять з ладу.
Так, це означає, що навіть введення файлу повинно відповідати вашим спробам перевірити та повідомити користувачеві максимальний розмір файлу, що приймається. Тільки HTML? Немає JavaScript? Добре, але користувач повинен бути поінформований про наслідки завантаження файлів, які занадто великі (головним чином, що вони втратять усі дані форми та будуть викинуті з системи).
4) Чи означає це, що вхідні дані HTTP-запиту не є частиною бізнес-логіки програми? Ні, це просто означає, що комп'ютери - це кінцеві пристрої, і ресурси потрібно використовувати розумно. Є сенс припинити шкідливу діяльність швидше, не пізніше. Ви платите більше за обчислювальні ресурси за очікування, щоб зупинити його пізніше.
5) Якщо вхід HTTP-запиту поганий, весь запит поганий . Ось як я на це дивлюся. Визначення хорошого введення запиту HTTP випливає з бізнес-вимог моделі, але має бути певна точка розмежування ресурсів. Скільки часу ви будете пускати поганий запит, перш ніж вбити його і сказати: "Ой, ей, неважливо. Погане прохання".
Судження полягає не лише в тому, що користувач допустив помилкову помилку введення, але і те, що HTTP-запит настільки поза межами, що його потрібно оголосити шкідливим і негайно зупинити.
6) Отже, на мої гроші запит HTTP (МЕТОД, URL / маршрут та дані) або ВСЕ добре, або НІЧОГО іншого не може продовжуватися. Надійна модель вже має завдання перевірки, що стосується себе, але хороший пастух-ресурс каже: "Мій шлях, або високий шлях. Приходьте правильно, або не приходьте зовсім".
Однак це ваша програма. "Існує більше ніж один спосіб зробити це". Деякі способи коштують дорожче часу та грошей, ніж інші. Перевірка даних HTTP-запиту пізніше (у моделі) повинна коштувати дорожче впродовж життя програми (особливо якщо масштабування чи зменшення).
Якщо валідатори модульні, перевірка базового * введення HTTP запиту ** в контролері не повинна бути проблемою. Просто використовуйте стратегічний клас Validator, де валідатори іноді теж складаються з спеціалізованих валідаторів (електронна пошта, телефон, маркер форми, капча, ...).
Деякі вважають це абсолютно невірним головою, але HTTP був у зародковому стані, коли Банда з чотирьох написала шаблони дизайну: елементи повторно використовуваного об’єктно-орієнтованого програмного забезпечення .
===================================================== =========================
Тепер, як це стосується звичайної перевірки введення користувача (після того, як HTTP-запит вважається дійсним), він оновлює представлення даних, коли користувач заблукає, що вам потрібно думати! Такий вид перевірки вводу користувача повинен відбуватися в моделі.
У вас немає гарантії JavaScript на передній панелі. Це означає, що ви не можете гарантувати асинхронне оновлення інтерфейсу програми зі статусом помилок. Справжнє прогресивне вдосконалення також охоплюватиме випадки синхронного використання.
Облік випадку синхронного використання - це мистецтво, яке втрачається все більше і більше, оскільки деякі люди не хочуть проходити час і клопоту відслідковувати стан усіх своїх хитрощів у користувальницькому інтерфейсі (показати / приховати елементи керування, відключити / увімкнути елементи керування , вказівки про помилки, повідомлення про помилки) на задньому плані (як правило, шляхом відстеження стану в масивах).
Оновлення : На діаграмі я кажу, що View
слід посилатися на Model
. Ні. Вам слід передати дані в View
звідти, Model
щоб зберегти нещільне з'єднання.