Desenvolvimento - ASP. NET
ASP.NET Dynamic Data
Neste artigo será abordado como criar uma aplicação dinâmica de dados oriundos a partir de uma modelo de dados do Linq To SQL.
por Renato HaddadIntrodução
Criar uma aplicação dinâmica de dados significa automatizar um processo de forma que a própria aplicação se encarregue de criar as operações básicas de leitura e manipulação de dados diretamente na base de dados. Para isto, o time do ASP.NET criou o ASP.NET Dynamic Data que foi introduzido no VS.NET 2008 a partir do Service Pack 1 em 2008. Sendo assim, agora temos uma forma de montar toda a estrutura do banco de dados e rodar uma aplicação que cria tudo automaticamente para que o usuário possa navegar pelos dados.
O conceito pode ser entendido como um gerador automático de páginas ou ainda um gerador de aplicações. Durante o artigo você verá que as telas não são das melhores, mas nada que um toque pessoal não resolva, afinal, a parte mais complicada será toda gerada pela aplicação.
Criação do projeto
Com o VS.NET 2008 aberto, crie um novo tipo de projeto (CTRL + SHIFT + N). Selecione a linguagem C# (poderia ser VB.NET também), o tipo de projeto Web e note que existe um template chamado Dynamic Data Web Application (Figura 1). É este o modelo a ser usado, portanto, dê um nome para a aplicação e informe qual o diretório será criado.
Figura 1 – Tipo de projeto
Clique no botão OK e o projeto será criado com diversas novidades. Veja no Solution Explorer (Figura 2) que existem vários folders no DynamicData, sendo que o FieldTemplates contém controles de usuários que serão utilizados nos formulários. Já o PageTemplates contém os modelos de páginas (formulários) a serem utilizados conforme o contexto, por exemplo, o Details.aspx é para visualizar os dados, o Edit.aspx é para editar, o Insert.aspx é para adicionar dados e assim por diante. Cada formulário deste utiliza a Master Page Site.Master o qual você pode customizar. É o tal negócio, a estrutura básica é criada automaticamente e depois cabe a você customizar, pelo menos o layout.
Figura 2 – Solution Explorer
O próximo passo é criar a estrutura de classes oriunda de um banco de dados. Adicione um novo item do tipo LINQ TO SQL Classes (Figura 3) chamado Northwind.dmbl.
Figura 3 – Novo Item
Em seguida abra o Server Explorer e monte a conexão com o seu banco de dados. Neste exemplo vou utilizar o Northwind. Arraste as tabelas Employees, Categories e Products (Figura 4) para a região em branco do .dbml. Com isto serão criadas todas as classes para estas 3 tabelas. Por fim, salve o arquivo (CTRL + S) para que seja gerado o arquivo .cs contendo todas as classes e propriedades.
Figura 4 – Estrutura do .dbml
O modelo de dados agora está contido no contexto da classe, ou seja, se você abrir o arquivo Northwind.designer.cs irá enxergar que a classe chama-se NorthwindDataContext o qual herda a System.Data.Linq.DataContext.
public partial class NorthwindDataContext : System.Data.Linq.DataContext
Sendo assim, grave este nome (NorthwindDataContext), é este o nome que você precisa saber. Em seguida, abra o arquivo Global.asax.cs, localize a linha 29 que está comentada:
//model.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false });
Desmarque o comentário e troque o YourDataContextType para NorthwindDataContext. Outra coisa que é importante não esquecer é de trocar o false por true da opção ScaffoldAllTables. Isto fará com que todas as tabelas listadas no .dbml sejam criados os formulários automaticamente. Veja como deverá ficar o código:
model.RegisterContext(typeof(NorthwindDataContext), new ContextConfiguration() { ScaffoldAllTables = true });
Em seguida, compile a aplicação e execute. Veja que no menu principal (Figura 5) já existem as três opções no menu com as respectivas tabelas. Posicione o mouse sobre a Categories e veja como foi montado o link. Isto se chama rota (namespace Web.Routing). Esta página principal é que você pode alterar a Master Page para exibir o nome e o logotipo da sua empresa, assim como mudar qualquer texto para português.
Figura 5 – Menu principal da aplicação
Clique na opção Categories e serão listadas no GridView todas as categorias existentes na tabela, já com as opções de Edit, Delete e Details (Figura 6). Como uma categoria contém produtos relacionados, também já é inserido um link chamado View Products para que sejam mostrados todos os produtos da respectiva categoria.
Figura 6 – GridView de categorias
Clique em View Products e note que a página de produtos é aberta contendo todos os produtos da respectiva categoria (Figura 7), além dos links de Edit, Delete, Details e a navegação para paginação. O curioso é que existem dois dropdowns: Discontinued e Category, ou seja, a própria aplicação já identifica os filtros que podem ser aplicados ao grid atual e monta automaticamente.
Figura 7 – Lista dos produtos de uma categoria
Se você clicar em Details irá visualizar (Figura 8) todos os detalhes do produto.
Figura 8 – Detalhes do produto selecionado
Agora vem o melhor de tudo. E se você quiser alterar alguma informação referente ao produto? Basta clicar no Edit para exibir um formulário completo com todos os dados disponíveis para edição do produto (Figura 9).
Figura 9 – Edição de dados
Cabe ressaltar que customizações sobre formatação e layout de páginas é só alterar o template de controle de usuário, ou ainda, estender a classe, pois todas são do tipo Partial Class e implementar qualquer tipo de customização. Pronto, você já tem praticamente a aplicação pronta, viu como é simples, fácil e rápido!
Você deve estar questionando em que situação deve aplicar o Dynamic Data? Eu sugiro que para protótipos isto é excelente, para aplicações pequenas também, assim como para partes de um site onde não haverá muitos recursos de customizações de layout, por exemplo, uma área de administração de um site.
Este é o link http://www.asp.net/dynamicdata/ do time de Dynamic Data.
Conclusão
Use e abuse dos recursos do Dynamic Data e do LINQ para ser um parceiro na produtividade no projeto. Aprofunde os estudos em customizações do Dynamic Data para você conseguir automatizar qualquer tipo de aplicação, desde as regras de negócios, layout e requisitos do sistema.