Откуда берется пользовательский ввод в архитектуре MVC?

StackOverflow https://stackoverflow.com/questions/1200715

  •  05-07-2019
  •  | 
  •  

Вопрос

Я хотел бы знать, откуда контроллер получает пользовательский ввод (для загрузки модели).Поскольку входные данные тесно связаны с пользователем, разве представление не должно быть осведомлено о конкретном способе получения пользовательских данных?Но как тогда я могу отделить контроллер от представления?Возможно ли сделать оба полностью независимыми друг от друга, как предполагают их цели?

Пример: Когда у меня есть приложение, которое использует библиотеку curses для просмотра, это подразумевает, что оно доступно только через терминал.Использование методов curses для чтения пользовательских данных в контроллере нарушило бы инкапсуляцию, но вызов методов в представлении не имел бы никакого отношения к отображению модели.

Это было полезно?

Решение

Рассмотрите возможность взаимодействия представления и контроллера через Шаблон наблюдателя.Контроллер регистрирует себя в качестве Наблюдателя в Представлении.Когда пользователь вводит данные в представление и нажимает Enter, Представление интерпретирует данные и уведомляет своих наблюдателей о наличии доступных данных.Затем контроллер может получить данные из представления с помощью общедоступного метода.

Другие советы

В MVC контроллер получает свой пользовательский ввод из представления.

Я не думаю, что представление действительно имеет много общего с вводом данных на самом деле.Я нахожу, что MVC намного проще визуализировать, если вы видите, что пользователь напрямую общается с контроллером.Контроллер получает данные от пользователя и отправляет представления обратно.Во многих системах механизм просмотра имеет некоторый ограниченный способ обновления самого себя (т. Е. Текстовые входные данные отображают то, что введено перед отправкой на контроллер).Но для любой архитектуры типа MVC вы можете заменить любое представление любым другим представлением при условии, что они оба способны обрабатывать одни и те же данные.

Например.Ввод имени пользователя может быть выполнен в любой системе, поддерживающей ввод строк.Контроллер принимает строку и поэтому может использоваться в веб-приложении, приложении терминала или приложении с графическим интерфейсом.

Я думаю, что представление должно иметь обратный вызов на контроллере для отправки через пользовательский ввод.В веб-архитектуре обратный вызов обеспечивается за счет возможности отправки пользовательского ввода обратно на сервер посредством http-запросов.

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

Что ж,

Я постараюсь быть для вас более конкретным.Предоставление расплывчатых / абстрактных ответов для ppl, которые вы можете видеть, не овладевает предметом, не помогает.

MVC -> Контроллер представления модели

Существует множество реализаций MVC, я не знаю вашего случая, но я приведу вам один.

Наиболее распространенная реализация MVC действует следующим образом..

Вид <-> Контроллер <-> Модель

В веб-сценарии..

Представлением будут ваши HTML-страницы, а ввод данных будет происходить в форме.

<form action=/home/createuser method=post>
...code goes here...
</form>

Home будет вашим контроллером (класс с именем home), а createuser - методом в home.

public class Home extends Controller {

   public void createUser(Userform f){
      ...create user...
   }
}

Эта форма будет отправлять данные в метод в качестве параметров.Createuser обработал бы их для общения с моделью и последующего сохранения данных, если это так.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top