MVC - eu preciso usar o Controller na View?

Como eu sei na implementação padrão do MVC nós passamos Controller e Model para o View

Mas estou um pouco em desacordo com essa idéia. Eu não quero meu ponto de vista para saber sobre o controlador e modelo (oh não. Talvez às vezes ver modelo de necessidades, mas tenho certeza que ele pode viver sem conhecimento do controlador)

Na minha opinião, o Controller deveria gerenciar View e Model, e o Model não precisa saber sobre controller e view; A visão não precisa saber o controlador (eu não excluo o modelo porque algumas implementações das vistas precisam de saber sobre o modelo para escutar mudanças no modelo). Então minha ideia é quevista não precisa saber sobre o controlador.

1 Aqui está um exemplo:

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();
    }

}

E controlador:

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 E agora, como vejo essa implementação sem passar pelo controlador:

Minha visão:

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();
                            }
                         });
    }

}

Interface "Comando":

public interface Command {

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

}

E controlador:

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();
     }

 };

}

Então, por que eu acho que usando o controlador na visãoNÃO É BOM:

Estamos misturando controlador e visualizamos implementações, fazendo novas dependências.

Também acho que o View deve conter apenas VIEWS e operações com eles (e usar controller e alguns de seus métodos já se parecem com lógica).

No primeiro exemplo, a visualização diz ao controlador o que fazer. Você concorda? Parece que a vista controla o controlador!

No segundo exemplo, o controlador controla o que fazer e apenas diz à visão o que fazer se algum botão (somente a visualização sabe qual botão será) clicado

Eu sempre usei o segundo esquema, mas depois de ler um novo livro sobre o mvc, que diz que precisamos passar o controlador para a visão, estou um pouco confuso.

Você pode por favor me ajudar a entender por que estou errado e me mostrar alguns exemplos?

questionAnswers(1)

yourAnswerToTheQuestion