O usuário interage com a View , mas a View deve comunicar as ações ao Controller . O controlador pode atualizar o modelo , mas não é necessário em todas / quaisquer alterações.
A descrição que estou fornecendo é baseada na minha experiência pessoal com a implementação do MVC em .NET. Sua implementação pode ser diferente.
O Controller é onde as ações são processadas, basicamente uma camada de negócios. Um controlador simples não fará nada além de obter os dados do Modelo para alimentar a Visualização. Um Controlador complicado realizará todo tipo de ações, até gerenciamento de segurança, autenticação, autorização, registro e, possivelmente, muitas outras coisas.
A exibição deve ser responsável apenas por exibir as informações de uma maneira que o usuário possa entender. Pode haver algum problema aqui com o Controller e o Model, pois coisas como SPAs (Aplicativos de Página Única) terão feedback de validação de dados para o usuário. Qualquer outro cruzamento é muito mal visto.
O modelo lida com dados. Isso inclui validação de dados (onde aplicável). O armazenamento e recuperação de dados também são tratados nessa camada.
ATUALIZAR
Parece haver alguma confusão em torno de quem faz o quê e quando. Incluí duas visões gerais diferentes das arquiteturas MVC porque são semelhantes, mas não são as mesmas. Há espaço para qualquer interpretação. Possivelmente, muito mais. As descrições acima são minha interpretação do MVC de várias fontes, incluindo minha própria experiência na criação de aplicativos usando essa metodologia. Felizmente, esta atualização ajudará a esclarecer algumas dessas confusões.
O MVC é uma tentativa de criar um padrão de design de Separação de Preocupações para o desenvolvimento de software. Ele foi implementado principalmente em aplicativos baseados na Web (que eu saiba).
O modo de exibição lida com toda a interação do usuário. Se o usuário clicar em um botão, a Visualização determina se o clique é uma interação da interface do usuário ou algo que está além de sua preocupação (uma interação do Controlador). Se o botão executar algo como copiar valores de um campo para outro, sua implementação determinará se isso é uma preocupação de Visualização ou de Controlador. Provavelmente, você só terá essa confusão de preocupações ao lidar com um SPA (aplicativo de página única).
O Controller é o local onde suas ações são processadas. A Visualização comunicou que o usuário decidiu alterar valores para alguns campos. O Controlador pode executar a validação desses dados ou pode ser tratado pelo Modelo. Novamente, isso depende da implementação. Se o Controlador tiver recursos de segurança, poderá determinar que o usuário não tenha privilégios suficientes para executar a ação. Rejeitaria as alterações e atualizaria a Visualização. O Controlador também determina quais dados recuperar do Modelo, como empacotá-lo e atualiza a Visualização com esses dados.
O modelo determina como e onde armazenar dados. Ele também pode executar a validação desses dados antes de armazená-los (isso deve ser feito porque as pessoas ignoram a Visualização ocasionalmente).
A Wikipedia tem um artigo sobre MVC .
- Um modelo notifica suas visualizações / visualizações e controladores associados quando houver uma alteração em seu estado. Essa notificação permite que os modos de exibição atualizem sua apresentação e os controladores alterem o conjunto de comandos disponíveis. Em alguns casos, uma implementação MVC pode ser "passiva", de modo que outros componentes devem pesquisar o modelo em busca de atualizações, em vez de serem notificadas.
- Uma visão é informada pelo controlador de todas as informações necessárias para gerar uma representação de saída para o usuário. Também pode fornecer mecanismos genéricos para informar o controlador da entrada do usuário.
- Um controlador pode enviar comandos para o modelo para atualizar o estado do modelo (por exemplo, editar um documento). Também pode enviar comandos para a visualização associada para alterar a apresentação da visualização do modelo (por exemplo, rolando um documento).
Da visão geral da Microsoft sobre MVC .
Modelos. Objetos de modelo são as partes do aplicativo que implementam a lógica para o domínio de dados do aplicativo. Geralmente, os objetos de modelo recuperam e armazenam o estado do modelo em um banco de dados. Por exemplo, um objeto Produto pode recuperar informações de um banco de dados, operar nele e, em seguida, gravar informações atualizadas novamente em uma tabela Produtos em um banco de dados SQL Server.
Em pequenas aplicações, o modelo geralmente é uma separação conceitual em vez de física. Por exemplo, se o aplicativo ler apenas um conjunto de dados e enviá-lo para a visualização, o aplicativo não terá uma camada de modelo físico e classes associadas. Nesse caso, o conjunto de dados assume a função de um objeto de modelo.
Visualizações. As visualizações são os componentes que exibem a interface do usuário (UI) do aplicativo. Normalmente, essa interface do usuário é criada a partir dos dados do modelo. Um exemplo seria uma visualização de edição de uma tabela Produtos que exibe caixas de texto, listas suspensas e caixas de seleção com base no estado atual de um objeto Produto.
Controladores. Controladores são os componentes que lidam com a interação do usuário, trabalham com o modelo e, finalmente, selecionam uma exibição para renderizar que exibe a interface do usuário. Em um aplicativo MVC, a exibição exibe apenas informações; o controlador lida e responde à entrada e interação do usuário. Por exemplo, o controlador lida com os valores da string de consulta e passa esses valores para o modelo, que por sua vez pode usar esses valores para consultar o banco de dados.