ASP.Net MVC - Desenvolvendo para o "Core" da Web

by Felipe Oriani 21. May 2010 12:23

Olá a todos! Algum tempo atrás a Microsoft já havia anunciado a versão MVC de sua plataforma de desenvolvimento web, o ASP.Net MVC. Esta por sua vez não veio como um sucessor da atual versão do ASP.Net WebForms e sim como uma alternativa tendo suas diferenças. Ambas as tecnologias são produtivas e eficientes e dizer que uma é melhor ou deixa de ser que a outra é pura falta de conhecimento.

Atualmente estamos na versão 2.0 do ASP.Net MVC, e espero que a Microsoft continue promovendo ambas as versões do ASP.Net, MVC e Webforms. Você pode fazer o download da versão 2.0 aqui e instalar, lembrando que o ASP.Net MVC contém compatibilidade apenas com as versões 2008 ou superior do Visual Studio.

Uma das principais vantagens que vejo no MVC perante ao Webforms, é que o primeiro foi desenvolvido diretamente para trabalhar já aplicando padrões de projetos (design patterns) e desenvolvimento orientado a testes (TDD) enquanto no segundo está mais focado no desenvolvimento orientado a componentes (entenda, como server controls) e eventos. Devemos ter em mente que tanto o ASP.Net MVC como o Webforms, contém o mesmo Núcleo, que é o ASP.Net CORE, o que permite o uso de diversos recursos que aplicamos em webforms, como chaching, logging, etc.

No ASP.Net MVC todo o output da aplicação web e todo o controle de estado ficam por conta do desenvolvedor (ou time de desenvolvimento) que por sua vez recomenda-se estar maduro em relação as Web Standards assim como em ASP (3.0), PHP e outras tecnologias. Dizer que isso é uma falta de produtividade é no mínimo imaturidade em relação a inovação tecnológica, pois em minha visão temos uma leve vantagem em relação ao ASP.Net Webforms, por exemplo: componentes de interfaces como grids, inputs, seletores, menus, etc...  podemos encontrar aos montes como extenções da JQuery, ExtJS, e outras bibliotecas client-side (javascript ou css) tornado as mais fáceis de se implementar em uma aplicação ASP.Net MVC pelo fato de termos controle do output, sem precisar se preocupar com os imensos campos conhecidos como ViewState que persistem o estado de cada server control (pecando um pouco na performace e output) em um webform.

Para quem estava acostumado a ASP.Net Webforms em montar suas URLs diretamente no sistema de arquivos, o cenário muda um pouco no ASP.Net MVC que por sua vez, utiliza um esquema de tabela de rotas que monta as URLs diretamente ligada aos Controllers que por sua vez retornam para o browser renderizar uma View, podendo passar um Model, mantendo URLs mais amigáveis aos usuários além de ter maior facilidade para integrar com otimizadores de buscas e SEO.

A versão 2.0 ainda trás novos recursos como maior suporte a Areas (que na versão 1.0 era possível porém exigia certo esforço do desenvolvedor para integrar), validação do Model em Client e Server side acesso assíncrono aos controllers, integração com sub-sessões (através do método Html.RenderAction que permite que a view renderize outra Action [outra View]) como resultado HTML, entre outros.

 

Existe um projeto demonstrativo no codeplex chamado MVC Music Store que aplica padrões de projetos junto a uma aplicação ASP.Net MVC 2.0. Trata-se de uma pequena loja virtual com um carrinho de compras implementado em C# e Entity Framework 4.0. Acesse o link do projeto em http://mvcmusicstore.codeplex.com/, faça o download e bons estudos.

 

 

 

Espero que gostem e bons estudos.

Abraços

Tags: , , , ,

.Net Framework | ASP.Net MVC | Padrões de Projetos

60 bibliotecas que todo desenvolvedor deveria conhecer.

by Felipe Oriani 17. February 2010 07:47

Olá pessoal, navegando pela web encontrei om link interessante e deixarei aqui como referência para quem quer tomar um rumo nos estudos. Trata-se de um post falando de diversas ferramentas que podem nos ajudar no processo de planejamento, desenvolvimento, testes e acompanhamento de um software. Segue o link

http://blog.webdistortion.com/2010/02/16/60-net-libraries-every-developer-should-know-about/

Espero que gostem!
Abraços

Tags: , ,

.Net Framework

C# Brasil - Compartilhando Conhecimento

by Felipe Oriani 29. January 2010 15:49

 

Olá a todos, a algum tempo estava pensando em criar uma comunidade para promover tecnologias que utilizo em minha vida profissional, e consequentemente fazer com que outras pessoas também possam contriuir para tal príncipio. Trabalhei por alguns anos com a linguagem C#, e tenho maior gosto por ela por ser uma primeiras linguagens que trabalhei em projetos que tiveram forte incluência em minha carreira profissional. Foi assim então que criei a rede social C# Brasil.

A principal razão de estar criando essa comunidade, é pelo fato de que algumas entidades onde participava (relacionadas a este assunto) deixaram de existir, então a partir disso nasceu a C# Brasil, com o intuito já citado.

A comunidade está acessível pelo endereço http://csharp.ning.com e todos podem se cadastrar e publicar algum material sobre C# no blog da comunidade, postar dúvidas no fórum, adicionar imagens e eventos relacionados a plataforma .Net Framework no geral.

 Obrigado a todos e participem, vamos levar adiante essa excelente tecnologia que está em constante evolução.

Abraços

Tags: , ,

.Net Framework | .Net Framework | C# | C#

Gerenciando Exceções em Aplicações .Net

by Felipe Oriani 7. September 2009 19:13

 

Olá pessoal, hoje vamos tratar de um assunto relacionado a tratamento de erros em aplicações .Net, no qual é muito importante para garantir a consistência da informação em certos momentos da execução e utilização de um software, seja na manutenção do código fonte, seja durante o desenvolvimento, em ambientes de testes e até mesmo em definição de regras de negócio que a aplicação deve atender.

Existem inúmeras classes no .Net Framework que são utilizadas para o tratamento de exceções (erros). Algumas destas classes já contem definições para um determinado tipo de exceção, como por exemplo, a classe FileNotFoundException que é disparada pelo .Net Framework quando a aplicação .Net tenta acessar um arquivo inexistente em disco. Estas classes já existentes para o tratamento de exceções no .Net Framework derivam de uma classe base chamada Exception, que contém uma definição bases para todo e qualquer tipo de erro/exceção que possa ocorrer durante a execução de uma aplicação .Net, seja web, windows forms ou distribuída.

Tratando exceções durante a execução.

Quando temos um bloco de código que sabemos que pode ocorrer uma exceção, devemos prevenir esta execução com o bloco try/catch/finally. Um código que é colocado entre este bloco, é determinado a tentar executar tal tarefa, e caso ocorra um erro é permitido que se trate o erro e tenha maior controle durante a execução. A listagem 1, exibe um exemplo de como o .Net Framework trata a execução dentre este bloco apresentado:

try

{

    //tenta executar um código

}

catch (Exception ex)

{

    //caso ocorra um erro, a execução irá entrar no bloco catch

    string mensagem = ex.Message;

}

finally

{

    //indepentende se ocorreu erro ou não,

    // este bloco é executado para finalização

}

Listagem 1: Bloco Try/Catch/Finally

Conforme a listagem 1 a execução que entra em um bloco try/catch/finally, entra no scopo do bloco try e executa o código, caso ocorra um erro, ela irá passar pelo scopo do bloco catch (perceba que resgatamos a exceção na declaração do bloco catch, e é aqui que podemos definir o tipo de exceção) e por fim , independentemente se ocorreu uma exceção ou não, é executado o bloco finally. Este último bloco finally, é opcional. Outro detalhe importante, é que esta estrutura de execução permite que coloquemos vários blocos catch, ou seja, podemos definir o tipo de exceção na declaração de vários blocos catch. Vale lembrar também que a execução de uma exceção em um bloco try/catch irá entrar no primeiro catch para qual a exceção disparada for cabível, ou seja, recomenda-se que o desenvolvedor especifique a declaração do bloco try/catch do tipo de exceção mais específica para a mais genérica. A listagem 2, exibe um exemplo para uma operação com arquivos:

 

try

{

    //tenta executar uma operação de IO

}

catch (FileNotFoundException ex)

{

    //caso o arquivo não tenha sido encontrado            

}

catch (FieldAccessException ex)

{

    //caso o arquivo não esteja acessível

}

catch (IOException ex)

{

    //erro geral no sistema de arquivos

}

catch (Exception ex)

{

    //erro geral na execução

}

finally

{

    //finalização de streams

}

Listagem 2: Demonstração de execução de blocos try/catch/finally

Como podemos ver no exemplo acima, temos quatro possíveis erros na execução deste código no qual executa uma operação de IO.

Criando as nossas exceções

Podemos também ter, além disso, nossas próprias exceções customizadas, mantendo informações personalizadas a respeito de o erro em questão. Por exemplo, um cliente que deseja fazer uma compra em um sistema de comércio e este está com pendências em haver com o setor financeiro da companhia. Podemos tratar estes problemas criando uma classe que derive de Exception e armazene informações do cliente para identificação durante a execução. A listagem 3 exibe um exemplo de uma classe customizada para o tratamento desta exceção.

public class ClienteDevendoException : Exception

{

    private Cliente _cliente;

    public Cliente Cliente

    {

        get { return _cliente; }

    }

 

    public ClienteDevendoException(int Id)

        : base("Cliente está com pendências no setor finânceiro. Favor verificar.")

    {

        _cliente = new Cliente(Id);

    }

 

    public ClienteDevendoException(Cliente cliente)

        : base(String.Format("O Cliente {0} está com pendências no setor finânceiro. Favor verificar.", cliente.Nome))

    {

        _cliente = cliente;

    }

}

Listagem 3: Criação de uma classe de exceção customizada.

Como podemos notar, a classe deriva de Exception que é a classe base e contém algumas customizações, como a mensagem de erro, e um objeto interno contendo a representação do cliente, sendo que em seu construtor ele pode receber um objeto do tipo Cliente ou o próprio Id do cliente.  Note também que a classe contém em seu nome o prefixo Exception, na qual é uma boa prática na nomeação de classes com esta finalidade, outro exemplo seria uma compra na qual o caixa não contém crédito suficiente, por exemplo: “CreditoInsuficienteException”.

Disparando exceções

Além de poder recuperar exceções durante a execução, podemos também dispará-las caso alguma informação seja executada incorretamente, como por exemplo, as regras de negócio de uma aplicação. Seguindo o exemplo anterior, nas regras de negócio de uma aplicação comercial um cliente não pode realizar uma compra caso contenha pendências com o setor financeiro da empresa, então podemos desenvolver uma execução como a listagem 4, disparando a exceção caso a condição não atenda aos quesitos.

if (ContemPendenciasFinanceiras(Cliente.Id))

{

    throw new ClienteDevendoException(Cliente);

}

 

Listagem 4: Disparando uma exceção.

Como podemos notar, utilizando a palavra-chave “throw”, podemos lançar a exceção para a execução da aplicação e interromper a execução do método no qual está realizando esta operação de venda e impedir que ela ocorra.

Da mesma forma que recuperamos a exceções no exemplo com operações de IO, podemos recuperar esta exceção customizada, veja na listagem 5.

try

{

    Venda venda = new Venda();

   

    foreach(VendaItem item in Itens)

    {

        venda.Items.Add(item);

    }

 

    venda.Cliente = new Cliente(IdCliente);

   

    venda.Finalizar();                    

 

    venda.ImprimirNotaFiscal();

}

catch(ClienteDevendoException ex)

{

    //cliente com pendencias

}

catch(Exception ex)

{

    //erros gerais

}

finally

{

 

}

Listagem 5: Execução e recuperação de exceção customizada.

Como podemos notar no exemplo, temos a execução de uma camada de aplicação simples na qual trata a criação de uma venda com o Cliente contendo pendências e erros comuns que possam ocorrer durante a execução com o bloco Exception.

Recomendações

Não tente utilizar o bloco try/catch para realizar tarefas que você tem certeza que possa ocorrer o erro e definir o valor de uma variável de retorno de funções.

Bem pessoal isso é tudo. Espero que tenha conseguido demonstrado de forma fácil como tratar e gerenciar melhor a execução de uma aplicação .Net.

Um abraço

 

Tags:

.Net Framework

Novidades no ASP.Net 4.0 e na IDE de Desenvolvimento

by Felipe Oriani 28. May 2009 17:51

Olá pessoal, tenho mais um post aqui com um link interessante sobre as novidades no ASP.Net 4.0 e na IDE de desenvolvimento (Visual Web Developer 2010 e Visual Studio 2010). Neste link, o autor fala um pouco sobre sobre as novidades que temos em Web Forms como trabalhar com tags meta através do code behine, novas funcionalidades no ASP.Net Ajax, maior controle sobre o ViewState de server-controls, gerenciamento de IDs gerado pelos server-controls, facilidade na persistencia de controles data bouds, melhor renderização do HTML em web forms, entre outras novidades. Vale a pena dar uma conferida!

http://msdn.microsoft.com/en-us/library/s57a598e(VS.100).aspx

Espero que acompanhem.

Um abraço.

Tags:

.Net Framework | ASP.Net | Visual Studio

Visual Studio 2010 Beta 1

by Felipe Oriani 26. May 2009 05:29

Algum tempo atrás, foi anunciado o Visual Studio 2010, e foi lançada uma versão CPT do Visual Studio 2010 no modelo de uma máquina virtual. Agora temos para download, o Visual Studio 2010 beta 1 junto ao .Net Framework 4.0 beta 1. No link abaixo você pode encontrar mais detalhes sobre a nova versão da IDE de desenvolvimento da Microsoft:

http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx

Existe também, um forum para discussão da versão do ASP.Net, à 4.0.

Acompanhem!

Fonte: www.asp.net

Tags:

.Net Framework | Visual Studio

Adicionando atributos em objetos no WebForm.

by Felipe Oriani 22. May 2009 11:15

Olá Pessoal, vou deixar aqui uma boa prática muito comum que para programadores que vieram do Php oudo Asp para o ASP.Net costumavam fazer e agora podem fazer da mesma formaem ASP.Net. Irei demonstrar como adicionar rapitamente um atributo na tag HTML dosWeb Controls gerada peloASP.Net em tempo de execução.

O Problema

Na versão atualdo ASP.Net (3.5) e em suas versões anteriores, temos um problema quando desejamos manipular umatag HTML através de Javascript, ou seja, as tags que são utlizadas para renderizar um TextBox, CheckBox ou uma ComboBox  por exemplo, sãotags que são escritas por marcações definidas pela próprio framework, fazendo com que elas se encarreguem de gerara tag HTML correspondente ao código aplicadono ASP.Net para ser interpretado pelo Browser, o que nos impede de adicionar funcionalidadesclient-side utilizando do Javascript para determinados eventos pré-definidos durante o desenvolvimento de uma página.

Como resolver

Todos os controles que herdam da classeSystem.Web.UI.WebControls.WebControl contém uma propriedade chamadaAttributes que representa uma instancia da classe System.Web.UI.AttributeCollection. É através desta propriedade que iremos adicionar atributosas tags que serão utilizadas para renderizar em nosso HTML. Esta classe contém métodossemelhantes a um Dictonary, ou seja, pode-se incluir nesta valores do tipo string queserão representados por umachave, onde a chave é o atributo que será iniciado e o valor que será o que será aplicado ao atributo determinado pelachave. Em tempo de executação, existem duas formas de se aplicar os atributos, mas ambas refletem o mesmo resultado, veja como proceder:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

   txtCampo.Attributes("onblur") = "this.className='textBox';"
   txtCampo.Attributes("onfocus") = "this.className='textBox_focus';"
   btnCancelar.Attributes("onclick") = "return confirm('Deseja cancelar a operação ?');" 

End Sub

O exemplo ilustra o cenário onde um campo do tipo TextBox, nomeado como txtCampo seja aplicado os eventos onblur e onfocus o código javascript descrito (que tem porobjeto alterar o atributoclass datag input), enquando o outro código que exemplifica a atribuição do evento onclick em uma instância deum Button, onde o código javascript exibe uma caixa de confirmação com uma mensagem. Neste último caso, temos uma propriedade queja nos facilita este acesso ao onclick em client-side queé a OnClientClick da instancia deum Button, onde podemos atribuir umafunção javascript.

Novidades

Na versão 4.0 do ASP.Net que está para ser lançada junto ao Visual Studio 2010, espera-se que alguns destes problemas como o controle da saída HTML do Webform seja melhorada, assim teremosmaior liberdade em nosso desenvolvimento, buscando fazer um código limpo, leve e objetivo.

Tags: ,

.Net Framework | ASP.Net

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Sobre

Sou Felipe Oriani e trabalho com desenvolvimento web desde 2004, com tecnologias Microsoft como Asp e Asp.Net utilizando as linguagens C# e Vb.Net. Bacharel em Ciência da Computação pela Escola de Engenharia de Piracicaba,  MCP (Microsoft Certified Professional) e lider da comunidade C# Brasil. Conheça um pouco mais sobre meu Currículum.

Selos

C# Brasil