.NET

20 jun, 2016

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

Publicidade

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 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:

  • Elimina o forte acoplamento entre objetos;
  • Torna a aplicação e o objeto mais flexível;
  • Facilita a criação de objetos fracamente acoplados;
  • Facilita a criação de testes unitários;
  • 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, crie 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 é 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 CSS, logicamente distintos, podem ser baixados 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 possam 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 está 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. E 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.