A razão pela qual eles geralmente são dissociados é porque você deseja que sua visualização use um controlador para obter seu modelo. Mas a arquitetura deve permitir que você substitua uma visualização por outra sem precisar alterar a lógica de negócios (por exemplo, modelo de objeto ou como esses objetos são recuperados).
Não vinculando seu controlador diretamente à visualização, mais tarde seria muito mais fácil adicionar outras funcionalidades, como importação / exportação, que podem usar o controlador / modelo diretamente, sem precisar depender de nenhuma interface do usuário.
Outra vantagem de extrair o máximo de código possível da interface do usuário é porque as interfaces do usuário são muito mais difíceis de testar na unidade do que a camada de negócios por trás delas. Ao separar o máximo possível da visão em si, você pode escrever muito mais testes de unidade para garantir que o controlador / modelo e a lógica do aplicativo estejam corretos.
O controlador lida com a lógica comercial, que pode mudar de tempos em tempos, e a Visualização pode permanecer inalterada, conforme os requisitos.
O vice-versa acima também é verdadeiro.
Designers e desenvolvedores precisam poder trabalhar no mesmo projeto independentemente.
Um bom post: http://mashable.com/2011/11/12/designer-collaboration-strategies/
Todo o sistema se torna mais sustentável. A solução de erros fica mais fácil com a abordagem dissociada.
Os padrões da Web com tecnologias de front-end estão mudando rapidamente. Imagine uma empresa que decide migrar todas as tecnologias de front-end para HTML5, Dart, etc. Ter um View e Controller associado seria um pesadelo!
fonte
Você não precisa separar os dois, é claro. Mas se view e controller forem independentes, qualquer interface de usuário poderá ser usada. Por exemplo, você pode usar o controlador através do console, soquetes, web ou interface da área de trabalho. Em outras palavras, você pode aumentar a reutilização do código.
fonte