Могу ли я изменить вид, не меняя контроллер? - PullRequest
0 голосов
/ 17 марта 2010

Притворись 1 есть место для ввода имени:

Имя: __________________

Когда текстовое поле изменяется, значение поглощается контроллером, который сохраняет его в модели данных. Бизнес-правила требуют ввода имени: если текст не введен, TextBox должно быть окрашено в вид, что указывает на плохую репутацию; в противном случае это может быть любой цвет, который нравится виду.

TextBox содержит String, контроллер обрабатывает String, а модель хранит String.


Теперь допустим, я хочу улучшить вид.

Существует новый тип текстового поля 2 , которое можно вводить не только на строковом вводе с клавиатуры , но и изображении . Представление (в настоящее время) знает, как определить, находится ли изображение в надлежащем формате, чтобы выполнить обработку, необходимую для извлечения текста из него. Если есть текст, то этот текст можно передать контроллеру, который передает его в модель данных.

Но если изображение недействительно, например, 3

  • неправильный формат файла
  • неверные размеры
  • недопустимая битовая глубина
  • необработанный или неизвестный формат кодировки
  • отсутствующие или неправильно расположенные регистрационные знаки
  • содержимое не распознается

представление может показать пользователю что изображение плохое.

Но «информирование пользователя о том, что что-то плохое» должно быть задачей контроллера.

Я, конечно, не собираюсь переписывать контроллер для обработки ввода текста на основе изображений (например, имен на основе изображений).

a. код двоично заблокирован внутри виджета GUI 4
b. есть и другие виды, кроме этого, я не собираюсь навязывать конкретный вид контроллеру
в. я просто не хочу. Если мне нужно что-то изменить за пределами этого улучшения пользовательского интерфейса, тогда я просто оставлю пользовательский интерфейс без улучшений 5

Так что вы думаете о том, чтобы иметь разные виды для одного и того же Модель и Контроллер ?



Уголок Нитпикера

1 гипотетический пример
2 например штрих-код, g-маска, ocr
3 Придуманные гипотетические причины
4 или аппаратное обеспечение USB-сканера штрих-кода
5 заставляет пользователя продолжать использовать DateTimePicker вместо TextBox

1 Ответ

0 голосов
/ 17 марта 2010

Я думаю, что вы затронули саму суть программирования MVC: в идеале, когда вы меняете представление, вам не нужно менять ни модель , ни контроллер. Тем не менее, то, что вы пишете здесь, это в основном адаптер для контроллера (так как вы не можете изменить контроллер), поэтому вам нужен дополнительный контроллер, чтобы превратить ваш образ (или что-то еще) в то, что контроллер может понимать.

Или другими словами; View - это просто код для рисования рамки, в которой отображается изображение во время извлечения текста, адаптер image-> text на самом деле является контроллером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...