Entendendo o processo de execução de uma aplicação MVC


Requisições para uma aplicação ASP.NET MVC primeiramente passam por um objeto UrlRoutingModule,que é um módulo HTTP.Esse módulo analisa a requisição e faz uma seleção de route.O objeto UrlRoutingModule seleciona o primeiro objeto route compativell a requisição atual.(Um objeto route é uma classe que implementa RouteBase,e é geralmente uma instância da classe Route).Se não forem encontradas routes,o objeto UrlRoutingModule não faz nada e deixa a requisição cair para o processamento de requisição normal do IIS ou  ASP.NET.

A partir do objeto Route selecionado,o objeto UrlRoutingModule obtém o objeto IRouteHandler que é associado com a Route do objeto.Geralmente,numa aplicação MVC,esse será uma instancia do MvcRouteHandler.A instancia IRouteHandler cria um objeto IHttpHandler e passa este para o objeto IHttpContext.Por padrão,a instancia IHttpHandler para o MVC é o objeto MvcHandler.O objeto MvcHandler então seleciona o controller que irá por último controlar a requisição.

Nota:Quando uma aplicação MVC roda no IIS7.0,nenhuma extensão de nome de arquivo é requerida pra projetos MVC.Entretanto,no IIS6.0,o handler requer que você mapeie a extensão de nome de arquivo .mvc para o ASP.NET ISAPI DLL.

O módulo e o handler são pontos de entrada para o framework MVC.Eles realizam as seguintes ações:

  • Selecionam o controller apropriado na aplicação MVC.
  • Obtem uma instancia especifica do controller.
  • Chamam o método Execute do controller.

A tabela a seguir lista os estágios de execução de um projeto MVC:

Estágio Detalhes
Recebe a primeira requisição para a aplicação No arquivo global.asax,objetos Route são adicionados para o
objeto RouteTable.
Realiza o roteamento O módulo UrlRoutingModule usa o primeiro objeto Route
compativel,na coleção RouteTable pra criar o objeto RouteData,
que é então usado pra cria um objeto
RequestContext(IHttpModule).
Cria um request Handler MVC O objeto MvcHandler usa a instancia do RequestContext
para identificar o objeto IControllerFactory(geralmente
uma instancia da classe DefaultControllerFactory)pra criar
a instancia do controller.
Executa o controller A instancia do MvcHandler chama o método Execute do Controller
Invoca a ação A maioria dos controllers herdam da classe base Controller.
Para esses controles,o objeto ControllerActionInvoker
que é associado com o controller determina qual método
de ação da classe controller chamar,e depois chama o método.
Executa o resultado Um método de ação comum pode receber entradas do usuário,
preparar a resposta de dados apropriada e depois executar o
resultado retornando um tipo de resultado.Os tipos de resultado
que podem ser executados,são os seguintes:
ViewResult
(que renderiza uma view e é o mais frequentte
tipo de resultado utilizado);RedirectToRouteresult,
RedirectResult,ContentResult,JsonResult, e  EmptyResult.

MVC Visão geral

MVC Visão Geral

A arquitetura MVC separa a aplicação em 3 principais componentes:o model,a view e o controller.O ASP.NET NVC framework oferece uma alternativa aos web forms ASP.NET.O framework MVC é leve,assim como aplicações baseadas em Web Forms é integrado com elementos do ASP.NET como master pages e autenticações baseadas em membership.O  framework MVC está definido no namespace System.Web.Mvc.

MVC é um padrão de design que muitos desenvolvedores já estão familiarizados.Alguns tipos de aplicação se beneficiam do MVC framework.Outros irão continuar com o tradicional modelo baseado em web forms e postbacks.Outros tipos de aplicação irão combinar os dois modelos;nenhum modelo elimina o outro.

O framework MVC inclue os seguintes componentes:

  • Model: Model são as partes da aplicação que implementam a lógica no dominio dos dados.Geralmente,objetos do model recuperam e armazenam o estado no banco de dados.Por exemplo,um objeto produto pode recuperar dados do banco,operar neste,e depois escrever a informação atualizada de volta para a tabela produtos no SQL server.

Em aplicações pequenas,o modelo geralmente é uma separação conceitual em vez de fisica.Por exemplo,se a aplicação somente le um conjunto de dados e manda este para a view,a aplicação,não tem uma camada model  fisica e classes associadas.Nesse caso,o conjunto de dados,representa o objeto model.

  • Views:View são componentes que mostram a interface de usuário.Geralmente,esta é criada a partir do modelo de dados.Um exemplo seria view de edição de uma tabela de produtos que mostra textbox,drop-down lists e checkboxes baseado no estado atual do objeto produtos.
  • Controllers:Controllers são componentes que controlam a interação,trabalhando com o modelo e por último selecionando uma view que mostrará a interface.Numa aplicação MVC,a visão somente mostra a informação;o controller controla e responde a interação do usuário.Por exemplo,o controller controla valores querystring e transmite esses valores para o modelo,que em turnos consulta o banco, passando estes valores.

O padrão MVC ajuda você a criar aplicações que separam diferentes aspectos da aplicação.O padrão especifica onde cada tipo de lógica deve se localizar na aplicação.A lógica de interface pertence a view.A lógica de entrada pertence ao controller.A lógica de negócio pertence ao modelo.Essa separação ajuda você a administrar complexidades quando você cria a aplicação,porque permite você focar em um aspecto de implementação individualmente.Por exemplo,você pode focar na view sem depender da lógica de negócio.

Além da de administrar a complexibilidade,o padrão MVC torna fácil o teste de aplicações, mais fácil do que o modelo baseado em web forms.Por exemplo,numa aplicação web form,uma única classe pode ser usada para mostrar a saída e responder a entradas do usuário.Escrever testes automatizados para aplicações em web forms pode ser complexo,porque para testar uma página individual,você deve instanciar a classe Page,todos os seus controles filho, e classes dependentes da aplicação.Como muitas classes são instanciadas para rodar a página,pode ser dificil escrever  testes que foquem exclusivamente em partes individuais da aplicação.Testes para aplicações em web form  podem por isso ser mais dificil de implementar do que  testes em uma aplicação MVC.Mais ainda,testes em aplicação web form requerem um servidor web.O framework MVC desacopla os componentes e faz uso pesado de interfaces,que tornam possivel testar componentes individuais isolados do resto do framework.

O desacoplamento entre os 3 principais componentes da aplicação MVC também oferece desonvolvimento paralelo.Por exemplo,um desenvolvedor pode trabalhar na view,um segundo desenvolvedor pode trabalhar na lógica do controller,e um terceiro pode focar na lógica de negócio no model.

Decidindo quando criar uma aplicação MVC

Você pensar cuidadosamente em implementar uma aplicação usando o MVC framework ou o modelo baseado em Web forms.O framework MVC não substitui o modelo de web forms;

Antes de decidir em usar o framework MVC ou o modelo de web forms para um web site,leve em consideração as vantagens de cada método.

Vantagens em usar o framework MVC

Ofece as seguintes vantagens:

  • Torna facil administrar a complexibilidade dividindo a aplicação em model,view,controller.
  • Não usa viewstate .Isso torna o MVC ideal para desenvolvedores que querem controle total sobre o comportamento da aplicação.
  • Oferece melhor suporte para ‘test-driven development’(TDD)
  • Funciona bem para aplicações que são suportadas por um time grande de desenvolvedores e web designers que precisam de alto grau de controle sobre o comportamento da aplicação.

Vantagens em usar Web Forms

Oferecem as seguintes vantagens:

  • Suporta um modelo de eventos que preserva  o estado HTTP.
  • Usa um modelo de controle de página que adiciona funcionalidade para páginas individuais.
  • Usa viewstate,que pode tornar a administração de estados mais facil
  • Funciona bem em times pequenos de desenvolvedores e designers que querem tirar vantagem do grande número de componentes disponiveis para o rápido desenvolvimento de uma aplicação.

Download ASP.NET MVC

Veja também:
Entenda o processamento de uma aplicação MVC
Valeu pessoal.Até a próxima!