Eu trabalho com o ASP.NET MVC (e outras implementações de MVC baseadas na Web) com bastante frequência, mas é algo de que nunca tive certeza: O controlador e a exibição devem se comunicar?
É claro que o controlador deve escolher qual visualização usar, mas o que quero dizer com isso deve passar os dados para a visualização? Na minha opinião, se a visualização está esperando dados do controlador, eles estão efetivamente vinculados como um par (controlador, visualização). Em vez disso, normalmente tenho a visão de comunicar com o modelo e ser independente de qualquer controlador.
Eu tenho a abordagem correta ou é este o caso de não haver uma resposta correta? A resposta muda quando se trabalha na web versus outros ambientes? A resposta muda quando você tem o conceito de uma exibição fortemente tipada (como no ASP.NET MVC) ou não?
fonte
Respostas:
O controlador prepara os dados que serão passados para a exibição para renderização / exibição. Ele também aceita dados de entrada do usuário por meio de um mecanismo de publicação-assinatura ou similar. Confira o primeiro diagrama na Wikipedia ou no site de Martin Fowler para obter mais informações sobre o MVC.
Embora uma visão geralmente aceite dados, na maioria das estruturas MVC, ela não depende de controladores específicos. Exceções são, por exemplo, a família JavaServer Faces. De um modo geral, estruturas como Rails, Django ou Spring MVC permitem dissociar visualizações de controladores passando dados (o contexto, geralmente um mapa / dicionário / bolsa) para uma exibição (onde uma exibição é uma implementação do padrão de exibição de modelo ).
O fato de sua linguagem de programação ser fortemente digitada não influencia a maneira como você está organizando seu aplicativo.
fonte
A pergunta que você está levantando é discutida em minha equipe de tempos em tempos. Argumentamos sobre duas abordagens, que têm seus contras e prós.
O primeiro, argumenta que o controlador pode atualizar a visualização pelo seguinte padrão. Ele escuta os eventos da GUI e do modelo. Quando um evento da GUI ocorre, ele executa a ação necessária no modelo, que por sua vez é acionado e evento. Agora, o controlador geralmente está atualizando a visualização com os dados necessários.
A segunda abordagem, argumenta que a própria exibição está ouvindo os eventos do modelo e se atualiza com os dados anexados ao evento ou consultando o modelo.
Na primeira abordagem, você tem mais poder para o controlador, que realmente controla tudo o que está acontecendo na sua aplicação. O poder de decidir de que maneira a visão deve ser atualizada de acordo com o evento que está em suas mãos e assim você mantém sua visão pura. No entanto, como você disse, dessa forma, você tem sua visão e controlador acoplados.
No segundo, você os está desacoplando, mas sua visão está realmente se controlando de alguma maneira.
fonte