Aos amigos que não conhecerem o padrão MVC, sugiro um artigo da Wikipedia

Uma das características do padrão MVC em sites é a url mais amigável. Um exemplo na prática:
Um microondas em uma loja online é encontrado pelos sites de busca com uma url semelhante a essa http://www.umlojaqualquer.com.br/housewares_productdetails.asp?Query=ProductPage&ProdTypeId=27&ProdId=1895899
Horrível para os humanos e para os crawlers da vida. Com urls amigáveis o mesmo produto poderia ser encontrado com uma url assim: http://www.umlojaqualquer.com.br/eletrodomesticos/detalhes/189/forno_microondas_22_L_piccolo_NN-ST357_panasonic

Melhorzinho pra se ler não é? Imagine para os crawlers! :)

Routes

A maioria dos blogs hoje (pelo menos aqueles que cuidam dos detalhes) usam essas técnicas, no caso o Programando em .NET utiliza o Mod_Rewtrite do PHP para fazer isso.Esse tipo de url nos sistemas MVC mais atuais são embutidos na própria arquitetura de pastas como você pode observar na imagem acima. E no ASP.NET MVC (não soh no asp.net mvc, no Ruby on Rails também é assim), essas urls amigáveis são facilmente contruidas com a técnica de ROTEAMENTO. Esta consiste em criar rotas que ao ler o que esta sendo requisitado na url e direcionar para o controler correto, e o controller se encarrega do resto.

Essas rotas são configuradas no arquivo Global.asax.cs. Vamos examinar o conteúdo gerado por padrão ao criarmos um novo projeto:

namespace MeuMVC
{
public class Global : System.Web.HttpApplication
{

protected void Application_Start(object sender, EventArgs e)
{
// Note: Change Url= to Url="[controller].mvc/[action]/[id]" to enable
//       automatic support on IIS6

RouteTable.Routes.Add(new Route
{
Url = "[controller]/[action]/[id]",
Defaults = new { action = "Index", id = (string)null },
RouteHandler = typeof(MvcRouteHandler)
});

RouteTable.Routes.Add(new Route
{
Url = "Default.aspx",
Defaults = new { controller = "Home", action = "Index", id = (string)null },
RouteHandler = typeof(MvcRouteHandler)
});

}
}
}

O que temos ai é que, ao iniciar a aplicação (Application_Start), através da classe estática RouteTable contida na namespace System.Web.Mvc será instanciada duas novas rotas da classe Route, usando como propriedades o formato da url a ação padrão e um handler de rotas.

A propriedade “Url” na rota define uma regra a ser usada no conteúdo da url. Aqui você tem uma infinita flexibilidade para criar regras como quiser. Por exemplo uma regra para um blog: “/Blogs/[Username]/Archive/[Year]/[Month]/[Day]/[Title]”

A propriedade “Defaults” define os valores padrão para a rota caso a url não inclua nada. Nas rotas geradas pelo projeto a primeira define como padrão – action = “Index”, id = (string)null – que diz que ao chamar qualquer Controller sob essa regra, o método padrão que será chamado é o “Index”, passando como valor no parametro “Id” o objeto null.

E por último mas não menos importante, a propriedade “RouteHandler”. Esta define a instancia da classe que será usada para processar a requisição da url, essa classe que direciona as requisições para o lugar certo. In the above examples we are indicating that we want to use the System.Web.Mvc.MvcRounteHandler class to process the URLs we have configured. Essa configuração existe pois também é possivel definir rotas para requisições que não sejam no padrão MVC, por exemplo, chamar um WebForm.

Como funciona?

Chamando a url:

  • http://www.meusite.com.br/
    • Esta requisição (/) cai na segunda regra, pois nenhuma como nada é passado na url, o servidor chama por padrão a pagina Default.aspx, e na segunda regra é passado como parametro para o handler chamar o Controller “Home”, método “Index” e o parametro “Id” nulo.
  • http://www.meusite.com.br/home
    • Na requisição (/home) é processada como “chame o controller home”, e como nenhuma ação ele passa para o handler “chame o método Index passando como parametro ‘null’”
  • http://www.meusite.com.br/produtos
    • Esta regra é o mesmo exemplo acima, porém, esta chamando o Controller “Produtos” e o método “Index” e como parametro ‘null’.
  • http://www.meusite.com.br/home/sobre
    • Nesta requisição (/home/sobre) o processo de roteamente irá chamar o Controller “Home” e invocar o método “Sobre” passando a ele como parametro ‘null’ já que nenhum parametro é passado a url.
  • http://www.meusite.com.br/produtos/listar
    • Segue o mesmo exemplo anterior, chamando o Controller “Produtos”, invocando o método “Listar” e como parametro ‘null’.
  • http://www.meusite.com.br/produtos/detalhes/12
    • Neste exemplo estamos requisitando ao Controller “Detalhes” e invocando o método “Listar” e passando como parametros o valor “12″, seguindo uma lógica, “12″ seria o codigo de um produto, o qual estamos pedindo para visualizar os detalhes.

E nosso exemplo de loja virtual lá em cima?

http://www.umlojaqualquer.com.br/eletrodomesticos/detalhes/189/forno_microondas_22_L_piccolo_NN-ST357_panasonic

Pois então, nessa url, estariamos requerendo do servidor o Controller “Eletrodomesticos” onde poderiamos gerar controlers categorizados por “departamento” e cada departamento ter como cor diferente de layout.

Nesta url, estamos invocando o Método “Detalhes” passando a ele como parametro “189″, o código do produto.

E o “forno_microondas_22_L_piccolo_NN-ST357_panasonic” ????

Isso não seria usado, existe apenas para tornar a url mais amigavel e ajudar na indexação do site. :)

Isto é , se chamassemos apenas http://www.umlojaqualquer.com.br/eletrodomesticos/detalhes/189 teriamos o mesmo resultado.

Espero que gostem do post !

[]´s

Referência:
URL Routing with MVC
ASP.NET MVC Framework (Part 2): URL Routing

, , ,

 silverlight

Hoje foi lançado na MIX08 o Silverlight 2.0 que até então era chamado de 1.1 Alpha Refresh, mas com os novos controles o nome oficial foi designado e diversas ferramentas foram disponibilizadas para download.

Já é possivel baixar a runtime (plug-in) para navegador com a nova versão pelo endereço http://www.microsoft.com/silverlight/resources/installationFiles.aspx?v=2.0 e as principais mudanças podem ser conferidas no link http://silverlight.net/GetStarted/overview.aspx.

Além da runtime a principal noticia é com relação às ferramentas para desenvolvimento de projetos Silverlight 2.0:

- Microsoft Silverlight Tools Beta 1 for Visual Studio 2008: Além da toolbar com os componentes SL 2.0 foi adicionado o suporte a Code/Design/Split à IDE tornando a criação de aplicações mais produtiva. 
sl2.0-tools-vs2008

- Expression Studio Beta 2 e Blend 2.5 March Preview: As ferramentas de design da linha Expression ganharam hoje mais um beta da versão 2 e foi liberado também o Blend 2.5 March 2008 Preview com suporte a projetos Silverlight 2.0. 
sl20-blend2.5

Estarei testando as novas ferramentas e farei um post sobre os novos controles do Silverlight 2.0 semana que vem.

[]‘s

SaintBr.     =]

, , , , , ,

 mix08

Mal começou a MIX 2008, realizada em Las Vegas e os primeiros KeyNotes já trazem notícias quentissimas.
Para começar já foi anunciado o Internet Explorer 8 Beta 1, que já pode ser baixado e já vem causando um certo barulho no cenário web, uma vez que o mesmo será compatível com os padrões existentes.

Outro KeyNote que trouxe excelentes notícias foi do ScottGu que apresentou as inovações do Silverlight 2.0 e do WPF e principalmente trouxe a publico o Silverlight Mobile que virá com o Windows Mobile 6, os demos mostraram exemplos funcionais criados por empresas parceiras que já utilizam o SL Mobile e teve ainda um video do vice-presidente da Nokia falando sobre a parceria e que os novos aparelhos da empresa já contam com o WMobile 6.

Hoje também foi apresentado um preview do SQL Server Data Services (SSDS) e também o novo release do Expression Studio 2 Beta que já pode ser baixado.

Como ir na MIX08 não é para qualquer um, eu estou aqui acompanhando online as sessions, mas um grande amigo meu, o Daniel da DuploD, também criador do blog ExpressionBlend, está tendo o privilégio de estar presente no evento e estará trazendo com exclusividade as novidades e os bastidores deste evento.

Só para salientar o Daniel ganhou essa viagem para Las Vegas como prêmio por ser o vencedor do Concurso Microsoft Expression (LATAM).

Vamos aguardar as proximas sessions e ver oque está por vir!

[]‘s

SaintBr.     =]

, , , , , ,

WebOrb4DotNet

É isso mesmo que você está lendo ! Mark Piller acaba de lançar a versão 3.4 do WebOrb For .Net e também anuncia que o produto que antes tinha uma versão limitada para uso sem custos agora é totalmente de graça!!
As versão Standard (free), Professional e Enterprise agora são uma só e todas as limitações foram removidas.

As features que mais chamam a atenção são:

- Flex Remoting;
- Data Management;
- Video Streaming / Recording;
- Data Push;
- Remote Shared Objects;
- Messaging;

Nessa nova versão as mudanças mais significativas são:

- Melhoria na compatibilidade com o AMF3;
- Suporte a RTMPT (RTMP Tunneling);
- Melhora significativa na performance;
- Configuração da serialização de DataSet/DataRow;
- Suporte à serialização de Proxy NHibernate;
- Suporte à serialização de ArrayCollection;
- Suporte configurável à serialização do tipo Enum;
- Adicionado gerador de código para PureMVC;
- VideoChat agora suporta som;

Noticias como essa vêm para mostrar que o .Net também tem o seu lugar garantido ao lado do Flex, mesmo com a chegada do Silverlight.

[]‘s

SaintBr.     =]

IE8Lançado a versão Beta do IE8

Eu já havia comentado do meu sonho e o sonho de todo desenvolvedor web, que a Microsoft criasse vergonha na cara e arrumasse o IE. Começou a (re)criar!

Alguns testers já viram que ele deu problema no ACID2, mas lá no Blog oficial já acharam o porquê! É um atributo que aponta para um domínio diferente de onde está hospedado o teste e parece que o IE (por questões de segurança) dá um certo problema. Lá ele descreve o problema direitinho!

Coisa boa: ELE SEGUE O PADRÃO DA W3C !!! JÁ INICIOU COM HTML 5 !!!

Quer baixar?

Eu já estou testando e vc?

[]´s