Притворись 1 есть место для ввода имени:
Имя: __________________
Когда текстовое поле изменяется, значение поглощается контроллером, который сохраняет его в модели данных. Бизнес-правила требуют ввода имени: если текст не введен, TextBox
должно быть окрашено в вид, что указывает на плохую репутацию; в противном случае это может быть любой цвет, который нравится виду.
TextBox
содержит String
, контроллер обрабатывает String
, а модель хранит String
.
Теперь допустим, я хочу улучшить вид.
Существует новый тип текстового поля 2 , которое можно вводить не только на строковом вводе с клавиатуры , но и изображении . Представление (в настоящее время) знает, как определить, находится ли изображение в надлежащем формате, чтобы выполнить обработку, необходимую для извлечения текста из него. Если есть текст, то этот текст можно передать контроллеру, который передает его в модель данных.
Но если изображение недействительно, например, 3
- неправильный формат файла
- неверные размеры
- недопустимая битовая глубина
- необработанный или неизвестный формат кодировки
- отсутствующие или неправильно расположенные регистрационные знаки
- содержимое не распознается
представление может показать пользователю что изображение плохое.
Но «информирование пользователя о том, что что-то плохое» должно быть задачей контроллера.
Я, конечно, не собираюсь переписывать контроллер для обработки ввода текста на основе изображений (например, имен на основе изображений).
a. код двоично заблокирован внутри виджета GUI 4
b. есть и другие виды, кроме этого, я не собираюсь навязывать конкретный вид контроллеру
в. я просто не хочу. Если мне нужно что-то изменить за пределами этого улучшения пользовательского интерфейса, тогда я просто оставлю пользовательский интерфейс без улучшений 5
Так что вы думаете о том, чтобы иметь разные виды для одного и того же Модель и Контроллер ?
Уголок Нитпикера
1 гипотетический пример
2 например штрих-код, g-маска, ocr
3 Придуманные гипотетические причины
4 или аппаратное обеспечение USB-сканера штрих-кода
5 заставляет пользователя продолжать использовать DateTimePicker
вместо TextBox