ASP.NET MVC: Crie um Controller Genérico

Neste artigo veremos como aumentar o reuso e padronização da camada controller da aplicação através da criação de uma abstração de comportamentos e fluxos comuns a diversos tipos de cadastros e formulários da aplicação.

Artigo do tipo Tutorial
Recursos especiais neste artigo:
Artigo no estilo Mentoring
Cenário
Normalmente todo sistema corporativo é composto por entidades core, que são aquelas responsáveis pelos processos principais do negócio, como por exemplo, movimentação de estoque, pedido, vendas e entidades de certa forma mais cadastrais como departamento, classificação, tipo, dentre outras. O que acontece é que estas entidades cadastrais possuem um fluxo muito semelhante de manutenção de seus dados, porém muitas vezes não percebemos isso e acabamos criando código duplicado em diversos cadastros com diversas implementações concretas que poderiam ser abstraídas.

Em que situação o tema é útil
Este tema é útil a todos que trabalham com ASP.NET MVC e desejam aumentar o reuso e padronização de sua camada controller através da criação de uma abstração de comportamentos e fluxos comuns a diversos tipos de cadastros e formulários da aplicação.

Uma das principais características das aplicações orientadas a objetos é a possibilidade de abstração que pode ser feita através do uso de interfaces ou de hierarquia de classes. Esta abstração nos permite obter maior reuso de nosso código, evitando duplicidade e redundância, fazendo com que tenhamos mais produtividade e padronização nas nossas soluções.

Apesar disso, é muito comum vermos desenvolvedores desatentos às oportunidades de abstração em suas aplicações, o que resulta em redundância de código e desperdício de tempo.

Neste artigo nós veremos um típico cenário destes onde criaremos um exemplo simples que consistirá em um cadastro comum de duas entidades: Funcionario e Departamento. Este cadastro será feito em ASP.NET MVC 4 e vai demonstrar uma oportunidade de abstração na camada de controller, através do uso de Generics e técnicas de refatoração.

Para que possamos compreender todo o raciocínio da solução, vamos criar um exemplo da forma como é realizado na maioria das equipes de desenvolvimento, partindo-se de uma solução concreta.

Listagem 1. Classe de Departamento 01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Web; 05 06 namespace DevMedia.BaseController.Models 07 { 08 public class Departamento 09 { 10 public long Id { get; set; } 11 12 public string Nome { get; set; } 13 } 14 }

Listagem 2. Classe de Funcionario 01 using System; 02 using System.Collections.Generic; 03 using System.Linq; 04 using System.Web; 05 06 namespace DevMedia.BaseController.Models 07 { 08 public class Funcionario 09 { 10 public long Id { get; set; } 11 12 public string Nome { get; set; } 13 14 public string Cargo { get; set; } 15 16 public Departamento Departamento { get; set; } 17 } 18 }

Nas Listagens 1 e 2 nós temos a definição das classes de nosso modelo, que usaremos para exemplificação da solução. São classes simples, apenas com estado, visto que nos limitaremos a criação e listagem destes dados em uma página web, sem entrar no mérito de comportamento e regras de negócio.

Uma vez definidas as classes do modelo, precisaremos de uma classe para realizar a persistência destes dados. Como o objetivo do artigo é criar uma abstração na camada controller, não trabalharemos com banco de dados, realizando apenas uma persistência fake, em memória, através de uma lista estática. Esta lista estática por sua vez, ficará em uma classe chamada repository, que visa abstrair o conceito de persistência e recuperação de dados para o domínio da aplicação. Com isso, nossa camada controller irá receber uma requisição da view, irá criar um repositório para o domínio em questão e invocará algum de seus métodos, sendo que neste caso teremos apenas os métodos necessários para nossa solução, sendo estes: Save, GetById e GetAll. Nas "

[...] continue lendo...
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados