MVC на командной строке

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

от сайта IBM представление имеет следующее определение

Представление обеспечивает представление модели. Это - вид приложения. Представление может получить доступ к образцовым методам get, но оно не знает о методах set. Кроме того, это ничего не знает о контроллере. Представление должно быть уведомлено, когда изменения в модели происходят.

Таким образом, если у меня есть следующее:

Модель

  • Человек

Посмотреть

  • EditPersonDetails

Контроллер

  • PersonController

Мой контроллер человека мог передать объект человека представлению EditPeronDetails, однако как мое представление редактирует человека, если это не может получить доступ к своим методам set, как я могу отредактировать человека?

Также действительно ли представление классифицирует, только делают одну вещь? т.е. я могу сделать, чтобы Человек Просмотрел, который имеет методы для, Создают, Представление, Удаляют, редактируют человека

большое спасибо

кости

11
задан dbones 14 December 2009 в 22:59
поделиться

3 ответа

Действительно ли здесь необходимо использовать трехбуквенное сокращение? если необходимо:

  1. пользователь видит экран консоли, на котором отображается представление (строки текста)
  2. пользователь вводит что-то в командной строке, то есть даже из view
  3. контроллер получает событие , т.е. контроллер пользовательского ввода
  4. делает что-то соответствующим образом и обновляет модель (люди)
  5. контроллер сообщает представление для перерисовки, т.е. печати еще нескольких строк.

psuedocode:

Person // model
   update();

View
   modelUpdated()
       println(Person.name); ...

Controller
     main()
         while( input = getInput() )
             person.update(...);
             view.modelUpdated();
8
ответ дан 3 December 2019 в 05:58
поделиться

define an abstract yet simple MVC program as:

interface Model {
    public void setName(String name);
}

interface View {
    public String prompt(String prompt);
}

class Controller {

    private final Model model;
    private final View view;

    public Controller(Model model, View view) {
        this.model = model;
        this.view = view;
    }

    public void run() {
        String name;

        while ((name = view.prompt("\nmvc demo> ")) != null) {
            model.setName(name);
        }
    }
}

then use the Observer pattern (built-in since JDK 1.0, see here) in order to fill the concrete classes:

class Person extends Observable implements Model {

    private String name;

    public Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        this.name = newName;
        setChanged();
        notifyObservers(newName);
    }
}

class TUI implements Observer, View { // textual UI

    private final BufferedReader br;

    public TUI(Reader reader) {
        this.br = new BufferedReader(reader);
    }

    public void update(Observable o, Object arg) {
        System.out.println("\n => person updated to " + arg);
    }

    public String prompt(String prompt) {
        try {
            System.out.print(prompt);
            return br.readLine();
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
    }
}

The main class, that is only responsible to build and connect together the components:

TUI view = new TUI(new StringReader("David\nDamian\nBob\n"));
Person model = new Person();
model.addObserver(view);
Controller controller = new Controller(model, view);
controller.run();

the ouput of this program is:

mvc demo> 
 => person updated to David

mvc demo> 
 => person updated to Damian

...
10
ответ дан 3 December 2019 в 05:58
поделиться

Я не уверен, как вы перенесли концепцию представления в командную строку, но я постараюсь ответить.

Мой персональный контроллер может передать объект человека в представление EditPeronDetails , однако как мое представление редактирует человека, если оно не может получить доступ к своим сеттерам, как я могу редактировать человека?

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

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

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

Итак, чтобы ответить на ваш вопрос, я полагаю, мы можем представить себе наличие специальных методов в представлении человека для захвата пользовательского ввода и обработки взаимодействия с контроллером, но не для логики CRUD (мне действительно интересно, как вы справляетесь взаимодействия с пользователем в командной строке, это кажется не очень удобным для приложения CRUD).

1
ответ дан 3 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: