ASP.NET Dynamic Data
Desenvolvendo aplicações dinâmicas
Sou um grande fã de geradores de código e ferramentas CASE, os softwares que fazem softwares. Qualquer solução que tenta automatizar o desenvolvimento de software, visa o aumento de produtividade.
Quando um trabalho é repetitivo, seja ele qual for, sempre existe uma oportunidade de automatizá-lo. E isso não é diferente no desenvolvimento de software. Se olharmos para as aplicações que desenvolvemos no nosso dia-a-dia, veremos que boa parte do nosso trabalho é de repetição. Não é a toa que uma das ferramentas mais utilizadas por um programador seja o famoso CTRL+C / CTRL+V.
É com olhos voltados para esta realidade que surgem ferramentas como o ASP.NET Dynamic Data. O ASP.NET Dynamic Data, como o próprio nome sugere, é um framework voltado para o desenvolvimento rápido e funcional de Data-Driven Applications.
Numa tradução livre, podemos dizer que Data-Driven Applications são aplicações orientadas a Dados. Este é um conceito também conhecido como DDDAS (Domain Data Driven Application System), que prega que a aplicação, ou parte dela, é criada dinamicamente tendo como base os dados e a estrutura destes dados. Esse também é um dos objetivos por trás do conceito de meta-dados.
O ASP.NET Dynamic Data trabalha em conjunto com um modelo que representa e mapeia a estrutura de dados de um banco de dados relacional. Este modelo pode ser criado com o uso do LINQ to SQL ou do Entity Framework, que são as duas mais atuais ferramentas de OR/M da Microsoft e com as quais o ASP.NET Dynamic Data é compatível.
Como veremos, é com base neste modelo de dados que o ASP.NET será capaz de criar dinamicamente as interfaces que farão a manutenção cadastral nas entidades declaradas no modelo. Para a criação destas interfaces o ASP.NET Dynamic Data irá utilizar os próprios controles do ASP.NET, como DetailsView, FormView, GridView e ListView.
Os Andaimes
O ASP.NET Dynamic Data trabalha com um conceito chamado Scaffolding, que significa andaime, ou a estrutura temporária que é feita em torno de um prédio durante a sua construção. Este termo é muito utilizado no Ruby On Rails e é um conceito de meta-programação para a construção de aplicações baseadas em banco de dados.
Scaffolding é uma técnica utilizada por alguns frameworks MVC (Model-View-Controller), onde o programador especifica como um banco de dados deve ser utilizado. O compilador neste caso usa essa especificação para gerar o código que a aplicação irá utilizar para realizar as operações CRUD, Create-Read-Update-Delete, nas tabelas do banco de dados.
Essa estrutura básica que é criada automaticamente é o que se chama de Scaffold, ou a estrutura sobre a qual o programador irá construir uma aplicação completa.
Nota do DevMan
Ruby on Rails é um framework gratuito que agiliza o desenvolvimento de sites orientados a banco de dados, fazendo uso do padrão MVC. Ele é composto por subframeworks, que realizam tarefas específicas como abstrair os dados, originalmente em tabelas, para que possam ser tratados como classes e objetos na aplicação; Gerar a visualização desses dados usando HTML, XML, JavaScript e outros; Gerenciamento de Email e WebServices. Para mais detalhes visite www.rubyonrails.pro.br
O ASP.NET Dynamic Data utiliza deste mesmo conceito para a geração das operações cadastrais (CRUD) básicas do modelo de dados especificado no LINQ to SQL ou EF. Além disso, ele inclui uma série de outras funcionalidades básicas na aplicação, como: filtros para chaves estrangeiras e campos booleanos, chaves estrangeiras são convertidas por nomes amigáveis, algumas validações também são criadas automaticamente etc.
Como veremos, o ASP.NET Dynamic Data trabalha com uma extensa quantidade de templates, que estendem as funcionalidades de controles como GridView e DetailsView, para possibilitar a criação das interfaces em tempo de execução. Estes templates fazem parte do próprio projeto criado com o ASP.NET Dynamic Data e podem ser facilmente customizados para atender necessidades específicas.
Nota do DevMan
Model-view-controller (MVC) é um padrão de arquitetura de software. Sua principal meta é separar a lógica da apresentação. De uma forma simples isso quer dizer que não teremos a lógica da aplicação atrelada aos formulários/páginas mas sim, separados. Isso é possível porque o MVC introduz três figuras:
· View: é a interface com o usuário;
· Model: os dados e regras de negócios que devem ser exibidos na View;
· Controller: é responsável em ligar a view ao model, coordenando as ações feitas pelo usuário para que elas atinjam o model.
A Microsoft está desenvolvendo o ASP.NET MVC Framework, um framework voltado exclusivamente para a criação de aplicações ASP.NET com a utilização do padrão MVC. O ASP.NET MVC Framework está atualmente disponível na versão 1 e pode ser baixado por aqui: http://www.asp.net/mvc/
Definindo o Database “VentoNorte”
Como estamos falando de um modelo de desenvolvimento baseado no database, a primeira coisa que devemos fazer para construir aplicações com o Dynamic Data é definir nosso banco de dados. Você já deve estar cansado de ver exemplos baseados no database Northwind da Microsoft. O problema é que este é o database mais didático que temos disponível e ilustra muito bem como é o desenvolvimento de uma aplicação com o ASP.NET Dynamic Data.
Mas para evitarmos a mesmice, vamos usar uma versão reduzida e abrasileirada do Norhtwind, que convenientemente chamaremos de VentoNorte. Essa versão tem algumas das tabelas do Northwind, porém com os nomes das tabelas, colunas e relacionamentos em português. Como os nossos testes serão muito mais ricos se tivermos dados nestas tabelas, eu mantive os dados do Northwind. Veja na Figura 1 o diagrama de entidades e relacionamentos do database VentoNorte.
Figura 1. Estrutura do Database VentoNorte
Você pode criar a estrutura deste database no próprio SQL Server 2005, baseando-se neste diagrama, onde temos todas as informações necessárias para a criação das tabelas e relacionamentos. Opcionalmente você pode digitar o script da Listagem 1, que irá criar esta mesma estrutura. Mas essas duas opções irão resultar em um database vazio. É por isso que eu sugiro que você baixe uma versão do database VentoNorte do site da DevMedia, pois esse sim será um database com dados.
Listagem 1. Script para a criação das tabelas e relacionamentos do database VentoNorte
USE [VentoNorte]
GO
/****** Object: Table [dbo].[Clientes] Script Date: 02/28/2009 18:54:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Clientes](
[ClienteID] [nchar](5) NOT NULL,
[ClienteNome] [nvarchar](40) NOT NULL,
[ClienteContato] [nvarchar](30) NULL,
[ClienteCargo] [nvarchar](30) NULL,
[ClienteEndereco] [nvarchar](60) NULL,
[ClienteCidade] [nvarchar](15) NULL,
[ClienteRegiao] [nvarchar](15) NULL,
[ClienteCEP] [nvarchar](10) NULL,
[ClientePais] [nvarchar](15) NULL,
[ClienteFone] [nvarchar](24) NULL,
[ClienteFax] [nvarchar](24) NULL,
CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED
(
[ClienteID] ASC
...