Na minha opinião, existem dois tipos de MVC - puros e impuros (pela falta de uma palavra melhor :)
MVC puro é o que foi introduzido na conversa fiada:
Destina-se a aplicativos pessoais de computação / desktop. Como você pode ver, o modelo informa as visualizações de quaisquer atualizações / alterações feitas nele. Não é assim com o MVC (impuro).
O outro MVC (impuro) que é apresentado para aplicativos da Web é mais um padrão PAC ( Presentation-abstraction-control ) em vez do MVC clássico acima. Isso é mais organização do código e separação de preocupações:
- Modelo : Abstração para dados armazenados
- Controle : Geralmente, o que é conhecido como camada de lógica de negócios, bem como parte do aplicativo responsável por rotear as solicitações HTTP para a lógica de negócios correspondente (aka controlador)
- Visualizar : visualize principalmente modelos que formatam os dados do modelo e os devolvem ao cliente. O modelo NUNCA envia atualizações para a visualização, nem a visualização 'assina' para atualizações de um modelo. Seria um pesadelo. Portanto, é mais parecido com o PAC do que com o verdadeiro MVC.
Agora, veja como um aplicativo da Web geralmente é estruturado:
- Front-end : MVC no cliente usando estruturas como Backbone.js etc., Esta é a forma MVC 'verdadeira' em essência.
- Back-end : Novamente, você possui MVC / PAC (impuro) para organização de código e separação de preocupações
- Aplicativo Web global (para o aplicativo Web como um todo): se você possui um back-end RESTful que retorna apenas dados JSON, todo o back-end pode ser percebido como um modelo para o aplicativo cliente front-end em que o View e o Controller residem em essência.
Então, quais são algumas desvantagens do MVC ? Bem, o padrão resistiu ao teste do tempo, por isso não há muitos que importam muito além de ser um pouco 'complicado'. Veja bem, o MVC é um padrão composto - implementa o padrão de estratégia / observador e todos estão bem organizados para formar um padrão de alto nível.
Você deve usá-lo em qualquer lugar? Talvez não. Aplicativos da web extremamente complexos podem ser divididos em várias camadas! Talvez você não consiga se safar apenas das camadas View / Business Logic / Data. A estrutura / organização abrangente ainda pode ser isenta de MVC, mas apenas em nível macroscópico.
Aqui está um exemplo em que apenas o MVC por si só pode ser uma má escolha : tente projetar um sistema de controle de tráfego aéreo ou um aplicativo de processamento de empréstimos / hipotecas para um grande banco - apenas o MVC por si só seria uma má escolha. Você inevitavelmente terá barramentos de eventos / filas de mensagens, além de uma arquitetura de várias camadas com MVC em camadas individuais e, possivelmente, um design abrangente de MVC / PAC para manter a base de código melhor organizada.