ASP .NET MVC 5 - 10 boas práticas que fazem a diferença


 Neste artigo vou apresentar 10 boas práticas que fazem a diferença no desenvolvimento de aplicações ASP .NET MVC 5. 

O framework ASP .NET MVC evoluiu muito desde a sua primeira versão e agora em sua versão 5 (embora a ASP .NET 5 já tenha sido liberada juntamente com o Visual Studio 2015) temos um framework robusto que permite desenvolver aplicações dinâmicas robustas.

Saber usar de maneira correta esta ferramenta é o grande diferencial e neste artigo eu vou mostrar 10 boas práticas que colaboram para que suas aplicações realmente façam a diferença.

1 - Não utilize o código gerado (demo) em uma aplicação de produção

Delete o controlador AccountController  e suas respectivas views da sua aplicação ASP .NET MVC imediatamente. Afinal é quase certo que você não irá usá-lo e neste caso por que manter código de demonstração em uma aplicação de produção.

2 - Isole os seus controladores do mundo exterior

Evite criar seus controladores com dependências de HttpContext, classes de acesso a dados, de log, de configuração.

Essa abordagem torna a aplicação difícil de testar, de evoluir e de modificar.

3 - Use um container IoC

Utilize um Container IoC para gerenciar todas as dependências externas.

O padrão IoC nos diz o que: "Devemos delegar a tarefa de criação de um objeto (classe Pedido) a uma outra entidade como uma outra classe, interface, componente, etc. de forma a termos um baixo acoplamento e minimizar a dependências entre os objetos."

 A seguir uma lista dos principais Containers IoC para a plataforma .NET:

  • Castle Windsor 
  • StructureMap 
  • Spring.NET
  • Autofac 
  • Unity
  • Puzzle.NFactory 
  • Ninject 
  • S2Container.NET
  • PicoContainer.NET
  • LinFu 
  • A maneira de implementar a inversão de controle chama-se injeção de dependência (DI) que nos trás os seguintes benefícios;

    Em suma, a DI isola a implementação de um objeto da construção do objeto do qual ele depende.

    4 - Evite utilizar strings mágicas

    Existem duas definições diferentes para strings mágicas mas podemos dizer que ambas constituem antipadrões de projeto. Nas duas definições as strings mágicas fazem o mesmo nebuloso uso de caracteres ou sequências de caracteres como numa outra inadequada prática de programação que inclui "números mágicos" no código-fonte sem sua definição explícita ou fácil entendimento do motivo daquele valor. A diferença delas se dá na forma de utilização das strings mágicas.

    A primeira definição, que pode ser encontrada com o título de "Magic Strings", trata as strings mágicas como uma constante literal no código fonte que dispara uma funcionalidade escondida (Easter Eggs, por exemplo) ao ser informada pelo usuário. Por exemplo, em um formulário, um usuário digita uma certa string em um campo específico e esta dispara um comportamento inesperado do sistema realmente parecendo ser mágica.

    Dessa forma evite usar declarações como ViewData["Key"], ao invés disso cria um ViewModel para cada View e utilize views fortemente tipadas.

    As strings mágicas muitas vezes fazem com que a sua view falhe devido a um erro de digitação somente em tempo de execução.

    Usar um modelo fortemente tipado evita isso pois você obtém um erro em tempo de compilação e ainda pode usar o Intellisense.

    5 - Não confunda o modelo de domínio com o modelo ViewModel

    O modelo de domínio ou Domain Model, representa o domínio, enquanto o ViewModel é projetado em torno das necessidades da View; Estes dois mundos são diferentes.

    Além disso, o Domin Model contém dados e comportamento, é hierárquico e é feito de tipo complexos, enquanto que o ViewModel é apenas um DTO, feito de strings.

    Saber usar o ViewModel de forma correta desacopla as suas Views do modelo de domínio.

    Um ViewModel representa apenas os dados que você deseja exibir nas suas views.

    Por isso usar o ViewModel desacopla o seu modelo de domínio de responsabilidades que são somente da view.

    6 - Empacote e Minifique arquivos de estilos e de scripts

    Muitos pedidos de uma única página HTML podem causar atrasos significativos e podem afetar as métricas globais do seu web site.

    O empacotamento ou Bundling é o processo de agrupamento de recursos distintos: como arquivos CSS em um único recurso para download. Desta forma, vários arquivos logicamente distintos arquivos CSS podem ser baixado através de um único request HTTP.

    Minification ou Minificação, por outro lado, é o processo que remove todos os caracteres desnecessários com base em texto de recursos, sem alterar a funcionalidade esperada. A minificação encurta identificadores, funções de mudança de nome, remove comentários e caracteres de espaço em branco. Em geral, a minificação refere-se a remoção de tudo o que foi adicionado principalmente para fins de legibilidade.

    Embora o empacotamento e minificação podem ser aplicados em conjunto, eles permanecem como processos independentes. Em um site de produção, geralmente não há nenhuma razão para não agrupar CSS e minificar arquivos de script.

    7 - Desabilite a validação da requisição

    A validação do request é um recurso que previne que conteúdo malicioso e perigoso seja submetido.

    Este recurso esta habilitado por padrão. Porém ás vezes você pode precisar que sua aplicação poste tags HTML para o servidor e neste caso tem que desabilitar esse recurso:

    [ValidateInput(false)]
    [HttpPost]
    public ActionResult Create([Bind(Exclude="Id")]Cliente cliObj)
    {}

    8 - Ponha os seus dados no Cache

    Você pode aumentar o desempenho da sua aplicação colocado os dados no cache

    Você também pode colocar no cache páginas que não sofrem muita alteração.

     public class HomeController : Controller
     {
          [OutputCache(Duration=3600,VaryByParam="none")]
          public ActionResult Index()
           {}
     }

    9 - Use Data Annotations para realizar a validação

    Você pode usar o namespace System.ComponentModel.DataAnnotations para fazer a validação do seu modelo do lado do servidor decorando com os atributos necessários:

     public class Cliente
     {
         [Required(ErrorMessage="O nome do Cliente deve ser informado")]
         public string Nome { get; set; }
         // ...
      }

    10 - Utilize os recursos do Model Binding

    O Model Binding é o processo de obtenção de objetos do modelo de entrada e saída dos controles, sem que você tenha que escrever um monte de código.

    Quando os métodos são chamados você não tem que escrever muito código para acessar os valores que foram postados de volta em caso de atualização, inserção ou exclusão. Em vez disso, o modelo de ligação ou Model Binding permite ter as propriedades de um determinado objeto do modelo automaticamente preenchida com os dados do postback.

    Usando o model binding, os nomes dos elementos de entrada são utilizados para definir os valores das propriedades em uma instância da classe do modelo, que é então passado para o nosso método action POST.

    O Model Binding é um recurso poderoso e personalizável que elimina o trabalho de lidar com solicitações HTTP, permitindo-nos trabalhar com objetos em vez de lidar com valores Request.Form[] e Request.QueryString[].

    Dessa forma com o Model Binding é fácil criar e manter aplicações web com muitas informações. Quando você usa o Model Binding com os data templates dynamic você pode rapidamente adicionar ou alterar propriedades em seu modelo de dados, e, essas propriedades são corretamente renderizadas e processadas nos formulários web em todo o site.

    Temos assim 10 dicas práticas e básicas que podem melhorar o desempenho de suas aplicações ASP .NET MVC.

    Porque não vos fizemos saber a virtude e a vinda de nosso Senhor Jesus Cristo, seguindo fábulas artificialmente compostas; mas nós mesmos vimos a sua majestade.
    2 Pedro 1:16

    Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

    Quer migrar para o VB .NET ?

    Quer aprender C# ??

    Quer aprender os conceitos da Programação Orientada a objetos ?

    Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

    Referências:


    José Carlos Macoratti