Início » 2011 » dezembro

Arquivo mensal: dezembro 2011

Visão Geral do ASP.NET MVC

O conteúdo desta página resulta da tradução do artigo ASP.NET MVC Overview originalmente presente no site do MSDN. A página correspondente pode ser conferida aqui.

Neste artigo vamos aprender sobre as diferenças entre uma aplicação ASP.NET MVC e uma aplicação ASP.NET Web Forms. Vamos aprender, também, sobre como decidir quando construir uma aplicação ASP.NET MVC.

A arquitetura MVC (Model-View-Controller) separa uma aplicação em três componentes principais: o modelo, a visão e o controle. O framework ASP.NET MVC fornece uma alternativa ao ASP.NET Web Forms criando aplicações Web baseadas no MVC. O framework ASP.NET MVC é leve, e é um framework altamente testado que (assim como aplicações baseadas em Web Forms) é integrado com características existentes do ASP.NET, tais como master pages e autenticação baseada em filiação. O framework MVC é definido no namespace System.Web.Mvc e é fundamental, e tem parte suportado no namespace System.Web.

MVC é um padrão de design que muitos desenvolvedores estão familiarizados. Alguns tipos de aplicações Web serão beneficiados pelo framework MVC. Outros continuarão a usar aplicações ASP.NET tradicionais que é baseado em Web Forms e postbacks. Outros tipos de aplicações Web combinarão as duas abordagens; nenhuma abordagem exclui a outra.

O framework MVC inclui os seguintes componentes:

MVC

Figura 1: Invocando uma ação do controller que espera um valor como parâmetro

* Models: objetos do modelo são as partes da aplicação que implementa a lógica para a aplicação. Frequentemente, objetos do modelo recuperam e armazena estados do modelo numa base de dados. Por exemplo, um objeto Produto pode recuperar informação de uma base de dados, operar sobre ele, e então redigir informações atualizadas de volta numa tabela Produtos no SQL Server.

Em pequenas aplicações, o modelo é frequentemente um conceito separado ao invés de físico. Por exemplo, se a aplicação só lê um data set e envia-o para a view (visão), a aplicação não tem uma camada de modelo físico e classes associadas. Nesse caso, o data set assume o papel de um objeto do modelo.

* Views: visões são os componentes que mostram as UI (User Interface – Interface com o Usuário). Tipicamente, esse UI é criado a partir dos dados do modelo (model). Um exemplo seria uma visão editada de uma tabela de Produtos que mostra Text Boxes, Drop-Down Lists e Check Boxes baseados no estado atual dos objetos relacionados a Produtos.

* Controllers: controladores são os componentes que manipula a interação com o usuário, trabalha com o modelo (model), e, por último, seleciona uma visão (view) para exibir a UI. Numa aplicação MVC, a visão só exibe informações; o controlador manipula e replica ao usuário entrada e interação. Por exemplo, o controlador manipula valores de query e/ou string, e passa esses valores para o modelo, que, por sua vez consulta a base de dados usando esses valores.

O padrão MVC ajuda você a criar aplicações que separa diferentes aspectos da aplicação (lógica de entrada, regras de negócios e lógica da UI), enquanto fornece um acoplamento entre esses elementos. O padrão especifica onde cada tipo de lógica deverá estar na aplicação. A lógica da UI pertence a visão. A lógica de entrada pertence ao controlador. Regras de negócios pertencem ao modelo. Essa separação ajuda você a gerenciar a complexidade quando você construir uma aplicação, que permite a você focar em um aspecto da implementação numa hora. Por exemplo, você pode focar na visão sem depender da regra de negócios.

As aplicações feitas no padrão ASP.NET MVC são mais fáceis de serem testadas do que aplicações baseadas em ASP.NET Web Forms. Por exemplo, numa aplicação ASP.NET baseada em Web Forms, uma única classe é usada para mostrar a saída e para responder ao usuário. Testes automáticos para aplicações ASP.NET baseadas em Web Forms podem ser complexos, porque para testar uma página individual, você deve instanciar classes da página, todos seus controles, e classes dependentes na aplicação. Pelo fato de muitas classes serem instanciadas para rodar a página, pode ser difícil escrever testes que foquem exclusivamente em partes individuais da aplicação. Testes para aplicações ASP.NET baseadas em Web Forms podem, portanto, serem mais difícil para implementar do que testes de uma aplicação MVC. Além disso, testes para uma aplicação baseada em Web Forms requerem um servidor Web (Web server). O framework MVC desacopla os componentes e faz grande uso das interfaces, que fazem possível testar componentes individualmente, isolados do resto do framework.

O não-acoplamento entre os três componentes principais de uma aplicação MVC também promove desenvolvimento paralelo. Por exemplo, um desenvolvedor pode trabalhar na view, um segundo desenvolvedor pode trabalhar na lógica do controller, e um terceiro pode focar nas regras de negócios do model.

Decidindo quando criar uma aplicação MVC

Você deve considerar cuidadosamente se deve implementar uma aplicação Web utilizando ASP.NET MVC ou ASP.NET Web Forms. O framework MVC não substitui o modelo Web Forms; você pode usar outro framework para aplicações Web.

Antes de você decidir se deve usar o framework MVC ou Web Forms para um Web Site específico, pese as vantagens de cada um.

Vantagens de uma aplicação Web baseada no modelo MVC

O framework ASP.NET MVC oferece as seguintes vantagens:

  • Torna-se fácil gerenciar a complexidade da aplicação dividindo-a entre Model, View e Controller.
  • Não utiliza view state ou formulários baseados em servidor. Isso faz com que o framework MVC seja ideal para desenvolvedores que querem total controle sobre o comportamento da aplicação.

  • Utiliza o Front Controller que processa pedidos de uma aplicação Web através de um único controller. Isso permite que você projete uma aplicação que suporte uma infra-estrutura rica. Para mais informações, veja sobre Front Controller no site do MSDN.

  • Fornece melhor suporte para TDD (Test-Driven Development).
  • Funciona bem em aplicações Web que são suportadas por grandes times de desenvolvedores e Web Designers que precisam de um alto grau de controle sobre o comportamento da aplicação.

Vantagens de uma aplicação Web baseada em Web Forms

O framework baseado em Web Forms oferece as seguintes vantagens:

  • Suportam eventos que preservam o estado da aplicação sobre o HTTP, que beneficia os ramos de negócios no desenvolvimento de aplicações Web. As aplicações baseadas em Web Forms fornecem dezenas de eventos que são suportados em milhares de server controls.

  • Utiliza o padrão de Page Controller que adiciona funcionalidades individuais às páginas. Para mais informações, veja Page Controller no site do MSDN.

  • Utiliza view state ou formulários baseados em servidor, que pode tornar o gerenciamento do estado da informação mais fácil.

  • Funciona bem para pequenos times de desenvolvedores Web e designers que querem levar vantagem do grande número de componentes disponíveis para o rápido desenvolvimento de aplicações.

  • Em geral, é menos complexo para o desenvolvimento de aplicações, porque os componentes (classes da página, controles, etc.) são hermeticamente integrados e usualmente requerem menos código do que o modelo MVC.

Características do framework MVC

O framework MVC apresenta as seguintes características:

  • Separação das tarefas da aplicação (lógica de entrada, regras de negócios e lógica da UI), testes, e TDD por padrão. Todos os contratos do núcleo do framework MVC são baseados pela interface e podem ser testados usando objetos simulados, que imitam o comportamento dos objetos atuais na aplicação. Você pode testar unidade por unidade da aplicação sem ter que rodar os controladores de um processo ASP.NET, que faz testes unitários rápidos e flexíveis. Você pode usar algum framework de teste unitário que seja compatível com o .NET Framework.

  • Um framework extensível e conectável. Os componentes do framework ASP.NET MVC são projetados de forma que podem ser facilmente substituídos ou personalizados. Você pode ligar no seu próprio mecanismo de exibição, política de roteamento URL, ação e/ou método de serialização de parâmetros, e outros componentes. O framework ASP.NET MVC também suporta o uso de DI (Dependency Injection) e IOC (Inversion of Control), que são modelos de containers. DI permite que você “injete” objetos numa classe, ao invés de confiar numa classe para criar seus próprios objetos. IOC especifica que se um objeto requere outro objeto, os primeiros objetos devem obter o segundo objeto de uma fonte externa tal como um arquivo de configuração. Isso faz com que os testes sejam fáceis.

  • Um poderoso componente de mapeamento URL que deixa você construir aplicações que tem compreensíveis URLs. URLs não tem que incluir extensões de nomes de arquivos, e são projetados para suportar padrões de nomeação de URL que trabalha bem com abordagens SEO (Search Engine Optimization) e REST (Representational State Transfer).

  • Suporte ao usar markup existente em páginas ASP.NET (arquivos .aspx), user control (arquivos .ascx), e master pages (arquivos .master). você pode usar características existentes no ASP.NET com o framework ASP.NET MVC, aninhadas em master pages, expressões inlines (), server controls, templates, data-binding, localization e etc.

  • Suporte a características existentes no ASP.NET. ASP.NET MVC permite que você use características tais como Forms Authentication e Windows Authentication, autorização de URL, membership e roles, output e data caching, session e gerenciamento de profile state, health monitoring, configuração de sistema, e provider architecture.

Andrielle Azevedo de Paula

C# – Namespaces

Em C#, um namespace é um mecanismo de controle da visibilidade de nomes dentro de um programa. Ele agrupa classes e tipos por semântica e é declarado com a palavra-chave namespace. O exemplo abaixo ilustra a criação de um agrupamento de classes utilizando um namespace.

namespace MinhaEmpresa
{
    public class Cliente
    {
        public string Nome;
        public string Telefone;
    }

    public class Fornecedor
    {
        public string Contato;
        public string Telefone;
    }
}

Para instanciar a classe Cliente, é necessário usar seu nome completo:

MinhaEmpresa.Cliente cliente = new MinhaEmpresa.Cliente();

No contexto de utilização de um namespace, a diretiva using tem o papel de simplificar o uso desses agrupamentos, seja encurtando o caminho para eles ou estabelecendo um alias, ou seja, importa um namespace.

Por exemplo, para instanciar uma classe Queue do .NET Framework, a qual representa uma fila, é necessário chama-la pelo seu nome completo, System.Collections.Queue. A diretiva using colocada no início do programa simplifica a forma de uso da classe. Uma ou mais diretivas podem ser colocadas no início do programa.

using System;
using System.Collections;

public class Fila
{
    public static void Main()
    {
        Queue fila = new Queue(5);

        //int
        fila.Enqueue(1);    
        //string
        fila.Enqueue("2");
        //char
        fila.Enqueue('3');
        //long
        fila.Enqueue(4L);
        //double
        fila.Enqueue(5F);

        Console.WriteLine("Esta fila possui {0} elementos", fila.Count);

        for (int a=0, 1=fila.Count; a < 1; ++a)
        {
            Console.WriteLine(fila.Dequeue().ToString());
        }
    }
}

O programa acima poderia ser escrito sem a utilização da diretiva using; porém, onde existem as classes Queue e Console, estas deveriam ser renomeadas para System.Collections.Queue e System.Console, respectivamente. A diretiva using elimina certas redundâncias, como a necessidade de usar o nome completo.

Nos namespaces aninhados, todos os nomes apresentados em namespaces externos são importados implicitamente para os namespaces internos. No exemplo abaixo, os nomes Middle e Class1 são importados implicitamente para Inner:

namespace Outer
{
    namespace Middle
    {
        class Class1 { }

        namespace Inner
        {
            class Class2 : Class1 { }
        }
    }
}

O namespace mais interno é chamado de inner namespace, e o mais externo é chamado de outer namespace.

Outra forma de escrever um namespace é simplificar o namespace aninhado para torna-lo longo. Isso é feito utilizando-se o operador ponto (.) para separar os nomes que comportarão o namespace.

namespace Terra.AmericaDoSul.Brasil.SaoPaulo
{
    class MinhaClasse { }
}

Para acessar a classe MinhaClasse, referencie o nome completo ou utilize a diretiva using para facilitar o acesso.

Terra.AmericaDoSul.Brasil.SaoPaulo.MinhaClasse classe;

Os namespaces longos e aninhados podem ser combinados.

Importar um namespace pode resultar em um choque com o nome de tipo. Em vez de importar o namespace inteiro, você pode importar apenas os tipos específicos de que necessita, atribuindo um alias (apelidos) a cada tipo. Por exemplo:

using PropertyInfo2 = System.Reflection.PropertyInfo;

class Program 
{
    PropertyInfo2 p;
}

Um namespace extenso pode ter um alias caractere, conforme abaixo:

using R = System.Reflection;

class Program
{
    R.PropertyInfo p;
}

Concluindo:

  • O namespace é um recurso que permite a organização por semântica e, se aplicado corretamente, evita a colisão de nomes.
  • Um namespace pode ser encontrado na forma simples, aninhado ou longo.
  • O principal objetivo de um namespace é criar um nome global único que o diferencie dos demais.
  • A diretiva using é usada em conjunto com um namespace para encurtar o caminho até os tipos contidos nele. Com using, é permitido a criação de alias.
  • Os namespaces podem ser agrupados e ter sua origem em diversos códigos, bibliotecas e módulos.

Referências Bibliográficas:

ALBAHARI, Joseph; ALBAHARI, Ben. C# 3.0: Guia de Bolso. Rio de Janeiro: Alta Books, 2008.
GALUPPO, Fabio; MATHEUS, Vanclei; SANTOS, Wallace. Desenvolvendo com C#. Porto Alegre: Bookman, 2004.

Estrutura de um Programa em C#

C# é uma linguagem de programação orientada a objetos de uso geral e com segurança de tipos, cujo objetivo é a produtividade do programador. Para este fim, a linguagem equaciona simplicidade, expressividade e desempenho.

Abaixo, temos o esquema de um programa em C#, apresentando alguns dos seus elementos mais comuns:


//Estrutura do programa C#

//Usando um namespace
using System;

//Namespace
namespace MeuNamespace                                      
{
    //Classe
    public class MinhaAplicacao                               
    {
        //Comentários de linhas múltiplas
        /*Este programa                                     
         exibe no prompt
         um cálculo de soma*/

        static void Main(string[] args)
        //Início de bloco
        {
            MinhaClasse m = new MinhaClasse();
            Console.WriteLine(m.Soma(100, 10));
        //Fim de bloco
        }

        //Comentário XML
        ///<summary>        
        ///Minha Classe Math                               
        ///</summary>

        public class MinhaClasse
        {
            //Método
            public int Soma(int a, int b) {return a + b;}   
        }
    }
}

A estrutura de um programa em C# pode ser dividida em um ou mais arquivos contendo os seguintes elementos:

  • Namespaces;
  • Tipos (classes, estruturas, interfaces, delegações, enums);
  • Membros (constantes, campos, métodos, propriedades, indexadores, eventos, operadores, construtores);
  • Outros (declarações, comentários, instruções).

No decorrer das semanas, postarei como cada elemento citado acima funciona num programa desenvolvido em C#.

Referências Bibliográficas:

ALBAHARI, Joseph; ALBAHARI, Ben. C# 3.0: Guia de Bolso. Rio de Janeiro: Alta Books, 2008.
GALUPPO, Fabio; MATHEUS, Vanclei; SANTOS, Wallace. Desenvolvendo com C#. Porto Alegre: Bookman, 2004.