MVC - мне нужно использовать контроллер в представлении?

Как я знаю, в стандартной реализации MVC мы передаем контроллер и модель в представление

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

По моему мнению, контроллер должен управлять представлением и моделью, а модели не нужно знать о контроллере и представлении; view не должен знать контроллер (я не исключаю модель, потому что некоторые реализации представлений должны знать о модели, чтобы прослушивать изменения в модели). Так что моя идея в том, чтоview doesnt need to know about controller.

1. Вот один пример:

public class MyView implements ButtonClickListener {

    private Controller myController;
    private Button myButton;

    // I commented out the model because we dont need it now 
    // we are talking about using controller in the view

    public MyView(Controller c/*, Model m*/) {
        myController  = c;
        myButton      = new Button(); // lets say that it is "register" button
        myButton.setOnButtonClickListener(this);
    }

    public void setRegisterButtonText(String text) {
        myButton.setText(text);
    }

    @Override
    public void onClick() {
        myController.tellToModelToDoSomething();
    }

}

И контроллер:

public MyController implements Controller {

     private Model model;
     private View view;

     public MyController(Model model) {

          this.model = model;
          this.view  = new MyView(this);

     }

     public void tellToModelToDoSomething() {
          model.doSomeActions();
     }


}

2. А теперь, как я вижу эту реализацию без прохождения контроллера:

Мой взгляд:

public class MyView {

    private Button myButton;

    public MyView() {
        myButton = new Button();
    }

    public void setRegisterButtonText(String text) {
        myButton.setText(text);
    }

    public void setOnRegisterButtonClick(final Command command) {
        myButton.setOnButtonClickListener(new ButtonClickListener() {
                            @Override
                            public void onClick() {
                                command.execute();
                            }
                         });
    }

}

& Quot; Команда & Quot; интерфейс:

public interface Command {

     void execute(/*also can handle extra params*/);

}

И контроллер:

public MyController implements Controller {

 private Model model;
 private View view;

 public MyController(Model model) {

      this.model = model;
      this.view  = new MyView();

      view.setOnRegisterButtonClick(command);

 }

 public void tellToModelToDoSomething() {
      model.doSomeActions();
 }

 private Command command = new Command() {

     public void execute() {
          tellToModelToDoSomething();
     }

 };

}

Так почему я думаю, что с помощью контроллера в представленииIS NOT GOOD:

Мы смешиваем контроллер и видим реализации, создавая новые зависимости.

Также я думаю, что View должен содержать только VIEWS и операции с ними (и использование контроллера и некоторых его методов уже выглядит как логика).

В первом примере представление сообщает контроллеру, что делать. Ты согласен? Похоже, вид контролирует контроллер!

Во втором примере контроллер контролирует, что делать, и просто говорит представлению, что делать, если нажата какая-то кнопка (только вид знает, какая кнопка будет)

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос