Push-based: MVC, usam actions que solicitam um processamento e empurram
(push) os dados para a camada view que irá renderizar os resultados ao
usuário. Ex: Rails, Struts, Django, Spring MVC, etc.
Pull-based:component-base, começam com a camada view, onde múltiplos
controladores podem ser puxados (pull) na medida que forem necessários. Ex:
ASP.NET, Weblocks, UCW, Seaside, PLT, etc.
Content Management Systems: CMS, implementam um core mínimo e permitem serem
extendidos com o acréscimo de módulos. Ex: Drupal, Joomla!, Plone, etc.
Gerência de dados: a maioria dos frameworks atuais tem uma alternativa para
tal. ORM é uma das mais utilizadas.
Gerência de estado de UI: todos os frameworks baseados em componentes ao
invés de MVC ou template engines suporta.
Gerência de control flow: problemático, apenas Weblocks, Seaside, UCW e PLT
suportam. Justamente porque a maioria das linguagens não suporta
continuations.
Iteração Modal: necessita de feedback antes de executar uma operação, p.ex:
"Deseja excluir o objeto? S/N".
Sequenciamento: é um conjunto de iterações modais, possivelmente com a
ocorrência de branches, p.ex: checkout de compras em loja virtuall.
Segurança: meios de gerenciar autenticação de usuários e restringir acessos.
URL mapping: meios para tornar as URL amigáveis, possibilitando melhor
publicidade e indexação por parte dos engines de busca.
Template System: meios de inserir código, variávies ou mesmo estruturas de
controle no código. Ex: PHP, Edi Weit'z HTML-TEMPLATE, etc.
Caching: meios de guardar documentos em cache, poupando bandwidth.
Ajax
Configuração Automática: minimizar configuração através de pré-configuração
(Rails) ou geração automática (Hibernate, por exemplo, gera schemas
Web Services: possibilita a criação de APIs acessíveis por softwares
terceiros
Fatos
Criar aplicações simples em MVC (Rails, p.ex) é realmente rápido. Porém,
quando a aplicação começa a requerer UI complexas, a gerência do estado
destas UI não pode ser executada de maneira simples em MVC.
O que é necessário na realidade não são aplicações simples, mas sim, UI
simples para processos complexos que tomam nosso tempo e dinheiro. E para
isso, a abstração de componentes torna-se necessária.
Outra grande vantagem de usar-se componentes é a possibilidade de
reutilizá-los em qualquer outra aplicação, ou ainda, desenvolver novos
componentes através de outros já existentes (p.ex: um gridedit é composto por
datagrids e dataforms). Componentes também suportam AJAX for free, Weblocks
por exemplo, apenas envia os componentes atualizados como HTML para o
cliente.