quinta-feira, 2 de setembro de 2010
Busca  
Porta 80 Web Hosting
 :: Acessibilidade
Ir para conteúdo principal: ALT + 1
 :: Participe
Seja um autor de CD/DVD de Treinamento
Publique um artigo
Publique uma oportunidade
Publique uma notícia
Publique um curso
Publique uma dica
Publique um código
 :: Informativo
Receba nossos informativos por e-mail.
E-mail:   
 
Digite a palavra abaixo:  
 
 
 :: Oportunidades
Cadastrar oportunidades
Gerenciar suas oportunidades
Cadastrar nova empresa
 :: Especiais
Básico de C++
C++ Builder
Curso ASP.NET 3.5 em VB.NET e C#
Guia Prático de HTML
Testes com Visual Studio Team System 2008
 :: Desenvolvimento
ActionScript
ADO.NET
ASP
ASP.NET
Automação Comercial
C#
C/C++
Coldfusion
CSS
Delphi
Disp. Móveis
HTML
Java
Javascript
LSL (Second Life)
Modelagem
PHP
Python
Sharepoint
Silverlight
SQL
VBA (Office)
Visual Basic
Visual Basic .NET
Visual Fox Pro
WCF/WPF
Web Services
XML
 :: Infra
BizTalk Server
CRM
Exchange Server
ForeFront / Antigen / IAG
Interoperabilidade
ISA Server
Linux
MOF
MS Dynamics CRM
Network
OCS / LCS
Outlook
Powershell e Scripts
Redes
Segurança
System Center e Gerenciamento
Virtualização
Windows
Windows Server
 :: Banco de Dados
Access
Caché
Firebird
Interbase
MySQL
Oracle
SQL Server
Sybase
 :: Gerência
Arquitetura
Ciclo de Vida de Desenvolvimento
Controle de Versão
Estimativas
Metodologias
MOF
Qualidade e Testes
 :: Design
Corel
Flash
Photopaint
Photoshop
 :: Livros
Análise Sistemas
Aplicativos
Banco de Dados
Certificação
Design e CAD
Gerência
Hardware
Internet
Programação
Programação Web
Rede
Segurança
Servidores
Sistemas Operacionais
 :: CDs/DVDs
Desenvolvimento
Infra
Design
 :: E-Books
.NET 2.0 (VS 2005)
.NET 1.1 (VS 2003)
SQL Server
Excel 2007
Excel 2003
Access 2003
ASP 3.0
Delphi
Java
Artigos


MVP Profile
ASP.NET 3.5 Extensions: Desvendando o ASP.NET MVC Framework
Por: Ricardo Oneda
[Entre em contato com o autor ]
Formado em Processamento de Dados pela Faculdade de Tecnologia de São Paulo, é Microsoft MVP (Most Valuable Professional) em ASP/ASP.NET e MCAD (Microsoft Certified Application Developer), com ênfase em aplicações Web com C# e Banco de Dados SQL Server 2000. Atualmente, trabalha como Analista de Sistemas no desenvolvimento de aplicações Web.
Blog: http://oneda.mvps.org/blog.
Feed de artigos.
Feed de artigos deste autor.
Gere seu feed personalizado  
MS TechEd 2010

ASP.NET 3.5 Extensions: Desvendando o ASP.NET MVC Framework
Publicado em: 11/01/2008

Em meu artigo anterior, discuti algumas características do ASP.NET MVC Framework, que traz para a plataforma .NET uma nova maneira de se desenvolver aplicações Web, diferente do modelo de WebForms existente até então no ASP.NET. Como na época em que o artigo foi escrito o acesso ao framework não era público, limitei-me a abordar alguns aspectos conceituais. Em meados de dezembro de 2007, a Microsoft lançou a versão CTP - Community Technology Preview – do ASP.NET 3.5 Extensions, que é um pacote contendo novas funcionalidades relativas ao ASP.NET 3.5. Dentre essas novidades, o principal destaque é o ASP.NET MVC Framework. O objetivo deste artigo é apresentar esse novo modelo, suas principais características, as diferenças em relação ao modelo anterior e como utilizá-lo na prática.

Pré-requisitos

Neste artigo, foram utilizados os seguintes recursos:

  • Visual Studio 2008 – nesta versão, o template de projeto do ASP.NET MVC Framework não está disponível para o Visual Web Developer 2008 Express. A Microsoft pretende lançar futuramente uma versão que atenda essa ferramenta.
  • ASP.NET 3.5 Extensions CTP de dezembro de 2007 – contém o ASP.NET MVC Framework.
  • ASP.NET MVC Toolkit – contém algumas funcionalidades adicionadas na última hora ao ASP.NET 3.5 Extensions. Futuramente, será incorporado ao mesmo, não sendo necessária a instalação separada.

Em alguns momentos do artigo, utilizaremos um arquivo XML para armazenar alguns dados. Para fazer o acesso e a manipulação do arquivo XML, será utilizado o LINQ to XML. Apesar de não ser fundamental para o entendimento do exemplo, o conhecimento prévio dessa tecnologia poderá ajudar. O exemplo será desenvolvido na linguagem C# 3.0/.NET Framework 3.5 e utilizará novas funcionalidades dessa versão, como inferência de tipos, propriedades automáticas, tipos anônimos, etc. Caso o leitor não esteja familiarizado com essas funcionalidades, na seção Referências no final do artigo, há links para artigos nos quais podem ser encontrados mais detalhes.

Vale citar que, por ser uma versão CTP, as informações aqui apresentadas estão sujeitas a alterações até o lançamento da versão final. Além disso, apesar dela ter se apresentado bem estável até o momento, recomenda-se que a mesma seja instalada em um computador do qual você não dependa para a realização de seus trabalhos, já que problemas e bugs podem (e provavelmente vão) aparecer. Pode-se, por exemplo, utilizar uma máquina virtual para os testes.

A arquitetura MVC

O MVC - Model-View-Controller -  é uma arquitetura que divide uma aplicação em três partes:

1)     o Model, contém a lógica de negócios e também é responsável pela manutenção do estado dos dados (por exemplo, armazenando os dados em um banco de dados);

2)     a View, responsável pela interface com o usuário e que não deve possuir nenhuma lógica de negócios e nem de acesso a dados;

3)     o Controller, que é o componente mais importante, pois responde pela interação com o usuário, manipula os dados do Model e escolhe a View a ser utilizada. Assim, é o componente que controla as demais partes do sistema.

Entre os benefícios desse padrão, está a clara separação dos papéis de cada componente, o que facilita a manutenção e a execução de testes unitários na aplicação. O ASP.NET MVC Framework implementa essa arquitetura em aplicações ASP.NET.

Você pode estar se perguntando o porquê de se introduzir esse novo modelo, já que até o momento, o ASP.NET gira em torno dos WebForms. Apesar dos WebForms terem apresentado avanços e inovações, como um estilo de desenvolvimento mais parecido com o de aplicações desktop orientado a eventos, abstração de detalhes de implementações de aplicações web (principalmente  HTML e o protocolo HTTP) e maior produtividade, essas vantagens tiveram um preço. Foi introduzido o ciclo de vida de uma página ASP.NET e toda uma série de conceitos (como PostBacks e Viewstate) que, para muitos, acabou tirando um pouco o domínio que o desenvolvedor tinha e adicionando uma complexidade que nem sempre é necessária. Além disso, com o modelo de WebForms, fica muito fácil misturar as responsabilidades de cada componente, como por exemplo, adicionando lógica de negócios diretamente nos eventos das páginas.

Então seria esse o fim dos WebForms? Teremos que esquecer tudo o que aprendemos nesses anos? Definitivamente, “Não” é a resposta para as duas perguntas. A Microsoft tem deixado bem claro que os WebForms continuarão existindo e sofrendo evoluções. O ASP.NET MVC Framework será uma alternativa, mas o seu uso não será obrigatório. Caberá aos responsáveis analisar as vantagens e desvantagens de cada modelo e escolher aquele que atenda melhor os requisitos e necessidades do sistema.

O processo de instalação do ASP.NET 3.5 Extensions CTP não é complicado, bastando seguir o assistente de instalação (o link para download pode ser encontrado na seção Referências). Após ter sido instalado, abra o Visual Studio 2008 e acesse o menu File > New Project para criarmos um novo projeto. Na janela que se abre, escolha a linguagem Visual C# e depois a pasta Web. Você irá notar novos templates de projetos que foram adicionados pelo ASP.NET 3.5 Extensions. Particularmente, veja os templates ASP.NET MVC Web Application e o ASP.NET MVC Web Application and Test. Ambos criam um projeto com a estrutura necessária para uma aplicação do tipo MVC. A diferença entre eles é que o segundo template também adiciona automaticamente um projeto de testes unitários à solution da aplicação MVC. A utilização de testes unitários em uma aplicação ASP.NET MVC está fora do escopo deste artigo. Portanto, escolha o template ASP.NET MVC Web Application e crie-o no local e com o nome que mais lhe agradar.

Figura 1 - Criando um projeto do tipo ASP.NET MVC Web Application

Após a aplicação ter sido criada, no Solution Explorer, você irá perceber uma estrutura diferente da utilizada por uma aplicação ASP.NET tradicional, conforme é mostrado na figura 2. As principais novidades são as pastas Controllers, Models e Views. Como você pode deduzir, são nessas pastas que ficam agrupados os componentes que compõem a arquitetura MVC. Na aplicação de exemplo criada com o projeto, temos um controller (HomeController.cs) e duas views (About.aspx e Index.aspx). Essas duas views estão associadas a uma Master Page (Site.Master), que está dentro da pasta Shared, a qual está sob a pasta Views.

Figura 2 - Estrutura de um projeto ASP.NET MVC

Antes de fazermos qualquer alteração na aplicação, vamos executá-la para ver como ela se comporta. Vá ao menu Debug e escolha Start Without Debugging. O browser será aberto com o resultado da operação. A aplicação não possui nada de especial, somente uma página com dois links, Home e About Us. Entretanto, se analisarmos bem, poderemos notar a primeira diferença de uma aplicação MVC em relação ao modelo WebForms. Na barra de endereços do browser, como é mostrado na figura 3, nenhuma página com extensão .aspx está sendo chamada explicitamente. Isso acontece porque em uma aplicação ASP.NET MVC, a URL é mapeada diretamente para uma classe que faz o papel do controller, e não para uma página física em disco. Neste caso, o controller que está sendo chamado é o HomeController, definido dentro da pasta Controllers do projeto.

Figura 3 - URL de uma aplicação ASP.NET MVC

Esse mapeamento entre a URL e o controller é feito por um mecanismo do próprio ASP.NET MVC Framework, que nos permite definir as regras a serem utilizadas para direcionar cada URL ao controller apropriado. Essas regras ficam definidas no evento Application_Start, do arquivo Global.asax.cs. Ao abrirmos esse arquivo, encontramos o seguinte código:

Figura 4 - Mecanismo de rotas do ASP.NET MVC Framework

 

Nele, são inseridas duas rotas na coleção Routes do objeto RouteTable, do namespace System.Web.Mvc, responsável pelo mapeamento entre URLs e Controllers. A primeira rota define que as URLs seguirão um padrão do tipo [controller]/[action]/[id]. Isso significa que, após o endereço do site, o primeiro parâmetro é o nome do controller, o segundo é o action (método do controller a ser executado  - um controller pode ter vários actions) e por último, um identificador [id] qualquer, que é um parâmetro passado para o método definido no action. A propriedade Defaults permite que sejam especificados valores padrão para os parâmetros. Caso o action não seja fornecido, seu valor padrão será Index. Para o id, o valor padrão será null. Assim, ao acessarmos a URL http://localhost:64701/Home/About do nosso exemplo, o ASP.NET MVC Framework chama o método About do controller chamado HomeController. Como não foi passado o parâmetro [id], o mesmo assumiu seu valor default, que nesse caso era null.

A segunda rota estabelece que, quando houver uma chamada à página Default.aspx (que normalmente é a página retornada pelo servidor web quando chamamos a raiz da aplicação), o mecanismo de mapeamento do ASP.NET MVC Framework deve chamar o método Index do HomeController. Assim, a URL http://localhost:64701/ será tratada dessa maneira.

Esse mecanismo de mapeamento funciona através de um módulo HTTP, definido no arquivo web.config de uma aplicação ASP.NET MVC:

Figura 5 - Módulo HTTP responsável pelo mecanismo de rotas

Cada requisição feita a uma aplicação passa pelo módulo HTTP UrlRoutingModule, que faz a análise da URL e determina para qual handler passar a requisição. Para aplicações MVC, esse handler é do tipo MvcRouteHandler (veja o parâmetro RouteHandler no código da figura 4), que irá então executar o controller especificado.

Uma informação importante é que as rotas são analisadas na ordem em que são adicionadas ao objeto RouteTable. Quando uma URL atende a um padrão definido de rota, o mecanismo deixa de pesquisar as demais rotas. Assim, a ordem em que as rotas são adicionadas deve ser cuidadosamente avaliada, ficando as rotas mais específicas em primeiro, e as rotas mais genéricas por último. Caso a URL não atenda os requisitos de nenhuma rota cadastrada, a requisição não é tratada pelo MVC Framework e é passada adiante. Isso permite que aplicações MVC e WebForms convivam simultaneamente sem problemas.







 

Inclua um comentário sobre o artigo Topo
Elogios e críticas são muito bem vindos, porém o comentário deve ter referência ao artigo em pauta.
O portal e o autor agradecem.
Nome:    
E-mail:      
Comentários:    
Digite a palavra abaixo:  
Para dúvidas técnicas, NÃO UTILIZE ESTE ESPAÇO, utilize nosso fórum de discussão.
http://linhadecodigo.com.br/cs2/forum
 
Comentários sobre o artigo Ver Todos comentários
Muito bom artigo me esclareceu muitas coisa sobre o MVC.
Quem enviou: Edson Costa
Postado em: 17/06/2008 00:00:00
Otmar,

o padrão MVC não especifica como você vai implementar cada um de seus componentes, mas sim como eles interagem entre si. No caso do Model, fui eu que optei por implementar dessa maneira, mas não há nada que obrigue a seguir esse modelo. Você tem liberdade para implementá-lo da maneira que achar melhor.
Quem enviou: Ricardo Oneda
Postado em: 05/02/2008 00:00:00
Cara, gostei do artigo, muito claro e prático como deve ser. Mas tem algo aí que não achei muito legal.

Se no padrão MVC é dito que a classe Model é responsável pela persistência dos dados, não seria interessante que cada entidade do sistema da camada model tomasse conta disso tudo em um única classe?
No caso do artigo, foram criadas as classes Feed e FeedRepository. Mas creio que esta classe Feed está degenerada, uma vez que na verdade ela é uma estrutura de dados (não tem operação alguma nela, só propriedades) apenas - renomear este class Feed pra struct Feed não ia dar erro algum!

Sei que é importante separar a parte de manipulação da persistência com a lógica do negócio,mas para termos um objeto de verdade, consistente com a definição de objeto, não seria mais elegante se utilizar uma classe parcial, em uma outra parte da classe ficaria apenas com o trabalho sujo de lidar com a persistência? Aí sim teríamos um objeto, que após ter suas propriedades definidas no controller, o controller invocaria seu método Save ou Delete, tendo aí um verdadeiro objeto? Essa forma ae creio que pode ser chamada padrão BRVC, uma vez que o model é na verdade uma classe Bean (um struct com getters e setters) e outra classe Repository ( apenas para persistência)
Quem enviou: Otmar Pereira
Postado em: 29/01/2008 00:00:00
Parabéns pelo Artigo, apresentou teoria e prática com exemplos bem explicados.
Quem enviou: Renato Mattos
Postado em: 23/01/2008 00:00:00
Parabéns pelo excelente artigo.

Além do MVC estou ancioso pela conclusão do Entitity Framework, por enquanto estou tendendo a usar o Subsonic, mas ainda posso esperar mais pouco para definir.

Obrigado
Paulo Henrique
Quem enviou: Paulo Henrique
Postado em: 14/01/2008 00:00:00
Outros artigos do autor Topo
Considerações iniciais sobre o ASP.NET MVC Framework
Acesso a dados em aplicações ASP.NET – Conceitos básicos – parte 3
Acesso a dados em aplicações ASP.NET – Conceitos básicos – parte 2
Acesso a dados em aplicações ASP.NET – Conceitos básicos – parte 1
Artigos relacionados Topo
Construindo um List Suggest com ASP.NET Web Services e JQuery
Acesso à Dados com ASP.NET - Parte 7
Acesso à Dados com ASP.NET - Parte 6
Web Site ou Web Application eis a questão
ASP.NET MVC/MVVM - Criando uma sessão de produtos
Acesso à Dados com ASP.NET - Parte 5
ASP.NET MVC Custom Helpers
Acesso a Dados com ASP.NET - Parte 4
Acesso a Dados com ASP.NET - Parte 3
Acesso a Dados com ASP.NET - Parte 2
Acesso a Dados com ASP.NET - Parte 1
Usando DataSet Tipado com ASP.NET
Gerenciador de conteúdo ASP.NET MVC 2 - Kooboo
Criando um Leitor de Arquivos em ASP.NET
Criando um Leitor de RSS em ASP.NET
Trabalhando com Update Panel no ASP.NET
Como fazer Deploy no ASP.NET 4?
Utilizando jQuery para invocar Actions
Enviando Emails com ASP.NET usando System.Net.Mail
Criando editor de texto personalizado em Asp.Net
JQuery auto complete em Asp.Net
Autenticação via Claims no ASP.NET MVC
Detectando erro a todo custo
Explorando os módulos do WIF para o ASP.NET
Autenticação via Claims no ASP.NET WebForms
Uma nova forma de Autenticação/Autorização
Autenticação e Autorização no ASP.NET MVC
Explorando Segurança do ASP.NET - Roles
Explorando Segurança do ASP.NET - Membership e MembershipUser
Programação Assíncrona no ASP.NET MVC
Produtos relacionados Topo
CD/DVD: CD de Treinamento Criando Aplicações Asp.Net em Camadas (parte integrante do portal de vídeos .Net)
Pacote: Promoção: Portal de Vídeos .Net + CD Novidades das Linguagens (válido somente para pagamento via boleto bancário)
Pacote: Promoção ASP.Net com Banco de Dados (válido somente para pagamento via boleto bancário)
CD/DVD: DVD de Treinamento E-Commerce com Visual Web Developer
CD/DVD: CD de Treinamento - Office SharePoint 2007 para Desenvolvedores WEB
Livro: Desenvolvendo para web usando o Visual Studio 2008
Pacote: Pacote: Desenvolvedor Web Kit III (4 CDs)
Pacote: Pacote: Desenvolvedor Web Kit II (3 CDs)
Pacote: Pacote: Desenvolvedor Web Kit I (2 CDs)
CD/DVD: CD de Treinamento - RAD Studio 2007 e ASP.NET 2.0 (Delphi)
CD/DVD: CD de Treinamento ASP.NET para Iniciantes - Visual Studio 2008
E-Book: ASP.NET Ajax com C# e VB.NET (E-Book com entrega via download)
CD/DVD: CD de Treinamento sobre LINQ to SQL para iniciantes com Visual Studio .Net 2008
CD/DVD: CD de Treinamento Introdução a banco de dados com SQL Server 2005 Express
CD/DVD: CD de Treinamento Novidades das Linguagens C# 3.0 e VB 9 (Visual Basic 9)
CD/DVD: CD ASP.NET 2.0 - Atualização Rápida (Visual Studio .NET 2005)
CD/DVD: CD - Treinamento de ASP.NET 2.0 AJAX Extensions
Livro: ASP.NET Utilizando C# - De Programador para Programador
E-Book: E-book: ASP.NET - Uma revolução na construção de sites e aplicações Web (via download)
Livro: Programando em C#.Net para Web: Guia Rápido Usando Visual Studio.Net 2003
Livro: Aprenda a programar Handheld e Pocket PC
© Copyright 2001-2010 Codeline Editora, Comércio e Tecnologia Ltda. | Política de privacidade e de uso | Anuncie | Fale conosco

» Site hospedado na Porta 80 Web Hosting «
Nossos números
Dicas: 1.314
Códigos/scripts: 279
Funções de VBScript : 90
Funções JScript : 05
Livros: 1.805
Notícias: 2.623
Artigos: 3.020
Cases: 14
Oportunidades: 4.591
Vídeos .Net: 484
Publicidade

Conheça a loja do Linha de Código.

Microsoft indica Linha de Código.

Assine a Revista Mundo .NET
Portal de Vídeos .NET - os melhores vídeos .NET estão aqui
O que você fará com o Visual Studio 2010?
Revista Codificando .Net

Siga-nos no Twitter

Linha de Código no Orkut
Fórum de discussão do portal Linha de Código
Feeds
Oportunidades
Notícias
Artigos
Artigos personalizado
       (Por assunto)
Artigos personalizado
       (Por autor)
Portal Vídeos .NET
Portal Vídeos Delphi
LC Blog
       (Onde você faz a notícia)
Promoções
Promoção Wordpress + Tabless (válido somente para pagamento via boleto bancário)
Promoção Wordpress + Tabless (válido somente para pagamento via boleto bancário)
De: R$ 149,70
Por: R$ 99,80
Promoção PHP + MYSQL Intelimax (válido somente para pagamento via boleto bancário)
De: R$ 308,00
Por: R$ 219,00
Promoção Especial Infra
De: R$ 175,95
Por: R$ 136,00
Promoção: Portal de Vídeos .Net + CD Novidades das Linguagens (válido somente para pagamento via boleto bancário)
De: R$ 162,00
Por: R$ 89,00
Promoção VSTS (válido somente para pagamento via boleto bancário)
De: R$ 219,00
Por: R$ 146,00
CDs/DVDss
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
Por: R$ 59,00
DVD Curso de CorelDraw X4
Por: R$ 79,90
DVD Curso de Fireworks CS4
Por: R$ 49,90
DVD Curso de Indesign CS4
Por: R$ 55,00
DVD Curso de Efeitos Digitais
Por: R$ 49,90
Livros
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
De: R$ 129,00
Por: R$ 77,40
Foundation FLASH CS3 para Designers
Ciência Moderna
De: R$ 139,00
Por: R$ 83,40
ALGORITMOS O Guia Essencial
Alta Books
De: R$ 64,90
Por: R$ 58,40
Treinamento Prático em Dreamweaver
Digerati Books
Por: R$ 14,95
Estudo Dirigido de Adobe Photoshop CS4 em português - Para Windows
Erica
De: R$ 88,00
Por: R$ 74,80
E-Books
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Por: R$ 30,00
Manual de Estudos - Exame 70-291 - Windows Server 2003 (606 páginas) - entrega via download
Por: R$ 30,00
Dominando MS – Visio ® em 20 Passos - Melhores Práticas em Gestão de Projetos (entrega via download)
Por: R$ 30,00
MS-Project® 2007 - Melhores Práticas de Gestão de Projetos - Dominando MS – Project ® em 20 Passos (e-book com entrega via download)
Por: R$ 20,00
Banco de dados com C# e Visual Studio .Net 2005 (entrega via download)
Por: R$ 20,00
Os 10+ | Autores do dia
Israel Aéce
Júlio Cesar Fabris Battisti
Anderson Patricio
Luiz Felipe de Freitas
Marcio Franco
Eric C M Oliveira
Robert Martim
Ramon Durães
Alessandro de Oliveira Faria
Alfred Reinold Baudisch
Os 10+ | Artigos do dia
HTML Básico
HTML Avançado
Criando aplicativos para o Orkut
PL/SQL - Procedures e Funções
Tutorial de Tabelas Dinâmicas no Excel – Parte 1
Como configurar Conexão Remota no SQL Server 2005
WCF – Gerenciamento de Instância
Básico de C++: Estrutura de um programa em C++
ASP.NET 2.0 - Explorando o GridView
Tutorial: Desenhando com o Corel Draw