Recentemente, em uma entrevista, uma das perguntas foi 'Por que usamos o MVC?' Acabei de responder que está muito mais próximo de como estão muitos sistemas do mundo real! Expliquei os benefícios que ele tem em relação à manutenção, escalabilidade etc. Mas eles não ficaram convencidos e finalmente me disseram que o MVC é usado principalmente porque 'permite testes de unidade fáceis'.
Embora eu saiba que o ponto é válido, eu ainda duvido que esse seja o principal motivo, porque (i) mesmo que eu decida não escrever Unit Testcases, o MVC é uma escolha provável (ii) Muitos sistemas GUI em que existem Unit Testcases siga o MVC.
Portanto, a pergunta é 'O teste de unidade é o objetivo principal do MVC Pattern?'
EDIT: Suponho que eles estejam mencionando a facilidade do Test Driven Development / escrevendo NUnit Testcases. Isso ocorre porque podemos escrever casos de teste para o modelo (desde que a exibição esteja refletindo exatamente as alterações de estado do modelo) - corrija-me se estiver errado.
Respostas:
O objetivo principal seria "separação de preocupações", pois o modelo, a visualização e o controlador têm responsabilidades distintas.
O autor do documento original da Xerox PARC afirma que:
Se o teste de unidade fosse o objetivo principal, seria possível visualizar facilmente as visualizações de teste de unidade. Uma análise do panorama dos projetos / estruturas de teste de unidade revelaria que isso é totalmente contrário à afirmação feita. Um seria tipicamente usando testes funcionais e de integração para testar a exibição.
fonte
Na minha opinião, a resposta é um firme "não". Talvez esse tenha sido o principal benefício observado nessa organização específica, mas eu não o chamaria de 'objetivo principal'.
Eu acho que não seria tão difícil implementar o MVC de alguma forma, isso é extremamente difícil de testar na unidade (caramba - o jeito que eu o fiz pela primeira vez foi dificilmente testável).
Por outro lado, pode-se dizer que praticamente qualquer padrão (excluindo coisas como Singleton) facilita o teste de unidade, pois geralmente promove o desacoplamento - mas esse é o seu 'objetivo principal'? Dificilmente.
fonte
O MVC (assim como a maioria dos padrões de design conhecidos) já existia antes de o teste de unidade se tornar conhecido. O livro do GoF foi publicado em 1994 - e eles estavam apenas documentando os padrões que estão em uso há anos (se não décadas) antes. (E não há menção a testes de unidade nele.) Sobre o teste de unidade, não consigo localizar um horário exato em que se tornou "público" - eu pessoalmente li sobre isso em artigos relacionados à Extreme Programming e ao primeiro livro do XP saiu em 1999.
Então, obviamente, o teste de unidade não poderia ser o objetivo principal de inventar / documentar padrões - embora seja justo dizer que os padrões, quando aplicados bem, facilitam bastante o teste de unidade.
fonte
Acho que não, a facilidade do teste de unidade é um dos benefícios, mas faz parte de uma coleção de benefícios ao usar o MVC, juntamente com os motivos que você lista. Dizer que existe um único motivo principal para usar o MVC é um erro. Parece que a empresa em questão escolhe o MVC para facilitar o teste de unidade; portanto, eles acham que esse é o principal motivo. Pessoalmente, minhas razões para usar o MVC são sua simplicidade em comparação aos formulários da Web, o que facilita o design e a manutenção, mas cada indivíduo / empresa terá seus próprios motivos para usar qualquer tecnologia.
fonte
No mundo do ASP.NET MVC, muitas melhorias no ASP.NET foram incluídas na própria estrutura. O principal objetivo desse padrão de design é isolar a lógica de negócios da interface do usuário, a fim de focar em melhor manutenção, melhor testabilidade e uma estrutura mais limpa para o aplicativo.
O ASP.NET MVC possui certos recursos que o tornam a melhor opção para escolher se você precisa de um ou mais dos seguintes itens:
• Um alto nível de controle sobre o HTML gerado : Ao contrário dos Web Forms, as exibições no ASP.NET MVC processam o HTML exatamente como você deseja. Recentemente, os Web Forms foram aprimorados nessa área, mas ainda não possuem o nível de controle que o MVC possui.
• Teste de unidade mais fácil : com o ASP.NET MVC, é muito fácil seguir padrões de teste, como o TDD (Test-driven Development). Devido ao complexo ciclo de vida do evento nos Web Forms, além de uma estrutura baseada em controle, o TDD é muito mais fácil com o MVC.
• Separação de preocupações : refere-se a ter todos os aspectos do sistema claramente separados um do outro. Por causa do padrão implementado, um aplicativo MVC é dividido em partes discretas e fracamente ligadas (modelo, visualizações e controladores), o que facilita a manutenção.
Alguns dos outros benefícios são:
• O próprio padrão MVC facilita o gerenciamento da complexidade, separando claramente a funcionalidade do aplicativo em três partes principais: o modelo, a visualização e o controlador.
• Os aplicativos Web ASP.NET MVC não usam o estado de exibição ou os formulários baseados em servidor. Isso torna a estrutura MVC ideal para desenvolvedores que desejam controle total sobre o comportamento de um aplicativo. O estado de exibição pode se tornar muito grande, o que é um problema para dispositivos como smartphones executando redes lentas (transmitir todas essas informações pode ser muito lento). Em uma página de formulários da Web, você pode ter apenas um por página. Essa é uma restrição bastante importante. No MVC, não existe essa restrição - ou seja, você pode ter quantos elementos quiser.
• O ASP.NET MVC fornece melhor suporte para o TDD (Test-driven Development).
• O ASP.NET MVC funciona bem para aplicativos da web suportados por grandes equipes de desenvolvedores e para designers da web que precisam de um alto grau de controle sobre o HTML. Processamento de solicitação do ASP.NET MVC
fonte