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.