Eu aprendi recentemente sobre o padrão de design do MVC. Estou aprendendo com o livro Head First Design Pattern.
De acordo com este livro (se bem entendi):
O modelo é a maior parte da lógica e dos dados do aplicativo.
A visualização é basicamente a GUI que representa o modelo visualmente para o usuário.
O Controlador é responsável por 'mediar' e agir como um 'intermediário' entre a Visão e o Modelo. A Visualização relata ao Controlador que o usuário fez uma ação e o Controlador o converte em chamadas de método no Modelo.
No entanto, muitos lugares na web contradizem o que eu entendo desse livro. Eles alegam que geralmente o usuário interage com o Controlador, não com a Visualização.
Qual deles é verdadeiro ou mais comum? O usuário interage diretamente com o Controller ou diretamente com o View? Ambas as abordagens são aceitáveis? Qual é o mais comum?
fonte
Respostas:
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 .
Da visão geral da Microsoft sobre MVC .
fonte
url-routes
, colocada noController
. Eu quero dizer que não há exibição ...O usuário interage com o Controlador . Do ponto de vista técnico, você não está interagindo com o View , apenas o está usando para interagir com o Controller .
Aparentemente, parece que o usuário está interagindo com a GUI - também para um não programador, isso faz mais sentido; no entanto, ao clicar em um botão, você basicamente está conversando com o Controller e não com o View .
Além disso, nem todos os aplicativos - mesmo os aplicativos da Web MVC, possuem uma GUI. Você pode interagir com o Controller por meio de uma API - simplesmente simples,
url-routes
por exemplo, colocado no próprio Controller .O controlador deve ser o local que recebe e manipula os pedidos do usuário. Portanto, se você está acessando o Model diretamente do View - não importa como, então não é mais o MVC .
fonte
Vamos usar um exemplo concreto de por que os usuários interagem diretamente com visualizações e não com controladores.
No aplicativo de música no iPhone, um recurso de alto nível é reproduzir uma lista de reprodução. "Reproduzir uma lista de reprodução" é uma função de um controlador para o aplicativo.
Há mais de uma maneira de ativar essa função. Posso clicar na lista de reprodução dentro do aplicativo ou pedir à Siri (interface de voz) para executar a mesma função. Esses são dois gestos diferentes que são reconhecidos pelas várias visões.
O feedback em cada visualização também é diferente. A Siri lhe dirá que está tocando a música solicitada. O aplicativo de música mostrará um feedback visual de que ele está tocando na lista de reprodução.
fonte