MVC - ¿Necesito usar el controlador en la vista?

Como sé en la implementación estándar del MVC, pasamos el Controlador y el Modelo a la vista

Pero estoy un poco en desacuerdo con esta idea. No quiero que mi vista sepa sobre el controlador y el modelo (oh no, tal vez a veces vea el modelo de necesidades, pero estoy seguro de que puede vivir sin el conocimiento del controlador)

En mi opinión, el controlador debe administrar la vista y el modelo, y el modelo no necesita saber acerca del controlador y la vista; La vista no necesita conocer el controlador (no excluyo el modelo porque algunas implementaciones de vistas deben conocer el modelo para escuchar los cambios en el modelo). Así que mi idea es queVer no necesita saber sobre el controlador.

1. Aquí hay un ejemplo:

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

}

Y 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. Y ahora, ¿cómo veo esta implementación sin pasar el controlador?

Mi vista:

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

}

Interfaz de "comando":

public interface Command {

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

}

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

 };

}

Entonces, ¿por qué creo que usar el controlador en la vista?NO ES BUENO:

Estamos mezclando implementaciones de controlador y vista, haciendo nuevas dependencias.

También creo que View debería contener solo VIEWS y operaciones con ellos (y el uso del controlador y algunos de sus métodos ya parecen lógicos).

En el primer ejemplo, la vista le dice al controlador qué hacer. ¿Estas de acuerdo? ¡Parece que la vista controla el controlador!

En el segundo ejemplo, el controlador controla qué hacer y simplemente le dice a la vista qué hacer si algún botón (solo la vista sabe en qué botón se hará clic)

Siempre usé el segundo esquema, pero después de leer un libro nuevo sobre mvc, que dice que debemos pasar el controlador a la vista, estoy un poco confuso.

¿Puede ayudarme, por favor, a entender por qué me equivoco y mostrarme algunos ejemplos?

Respuestas a la pregunta(1)

Su respuesta a la pregunta