Atenção: esse artigo tem um vídeo complementar. Clique e assista!
ASP.NET Dynamic Data é um template para a criação rápida de Web Applications orientadas ao trabalho com bancos de dados. O seu principal foco é permitir a criação de toda uma estrutura para CRUD de dados com pouco ou nenhum código. Apesar disto, a possibilidade de customização está entre os seus pontos mais interessantes e certamente é uma opção para trabalhar com projetos que tenham pouco prazo disponível ou que sejam de complexidade baixa. Pode ser também considerada uma opção para a criação da estrutura de aplicações mais complexas, deixando a cargo do Visual Studio a tarefa de gerar o código básico que será utilizado, bem como os controles mais comuns.
Em que situação o tema é útil
Este tipo de projeto é direcionado para situações onde o tempo para a entrega do projeto seja realmente escasso e as operações que serão disponibilizadas sejam basicamente a manutenção de dados em um repositório. Por exemplo, pode ser uma opção de projeto para criar um portal para administração de usuários de uma intranet ou também para projetos de vida curta como sites vinculados com eventos e que sirvam para o usuário deixar os seus dados cadastrados. Se a necessidade for simplesmente fazer CRUD em poucas tabelas, o ASP.NET Dynamic Data é uma escolha que deve ser analisada.
ASP.NET Dynamic Data
O ASP.NET Dynamic Data oferece uma alternativa interessante para o desenvolvimento Web. Com ele não é necessário codificar tarefas repetitivas, como as operações CRUD (inserção, recuperação, exclusão e atualização de informações). Também não é necessário cuidar da formatação das páginas. O Visual Studio cria os modelos e apenas se o programador quiser personalizar, será necessário realizar alguma alteração. Aliado a isto temos uma camada de dados que utiliza Linq to SQL para bancos de dados SQL Server e Entity framework para outros bancos. Isto permite que o mapeamento ORM possa ser feito sem codificação, novamente usando os assistentes do Visual Studio.
Apesar de tanta automatização o resultado pode ser melhorado com customização de páginas completas, controles e tratamento da validação dos dados.
O ASP.NET surgiu como uma alternativa para desenvolvimento rápido de aplicativos Web. Ao usar controles de servidor (server controls) e com a linguagem C# fazendo o trabalho de definição de regras de negócio. Desta forma, chegou-se a um nível em que o desenvolvimento Web tornou-se quase tão rápido e simples como o desenvolvimento de aplicações desktop existentes na época do seu surgimento. Nos projetos mais típicos, os controles eram arrastados para um WebForm tendo suas propriedades ajustadas e, algum código, sendo escrito para tratamento dos eventos.
Entretanto este tipo de abordagem para as aplicações Web começou a produzir alguns problemas e insatisfações, principalmente partindo dos desenvolvedores que já estavam acostumados com outros padrões para desenvolvimento Web, notadamente usando a edição do HTML manualmente e tendo o controle completo de scripts e o gerenciamento do estado da página. Com o ASP.NET perdia-se um pouco deste controle e o código gerado automaticamente nem sempre era o melhor a ser usado.
Veio então uma nova versão do framework e com ela novos recursos foram adicionados. Agora havia o ASP.NET MVC e o Linq To SQL e mais tarde o Entity framework.
Com o MVC, o framework .NET disponibilizou a sua versão para este design pattern tradicional para o desenvolvimento de aplicações, fazendo separação entre as camadas de dados e regras de negócio (Model), de apresentação (View) e como estas se conectam (Controller) aliando com boas práticas no desenvolvimento de projetos para a Web.
Usando este design pattern é possível voltar a ter o controle do comportamento da página. O que representa não somente a possibilidade de fazer ajustes precisos no código HTML gerado, mas, também, personalizar a forma como os links são gerados usando routing e, graças ao Linq, fazer a ponte entre dados relacionais armazenados no banco e a orientação a objetos.
Routing consiste em construir um hiperlink de forma que seu conteúdo possa ser facilmente entendido não apenas pelos browsers, mas também pelos usuários. Assim, um link que antigamente poderia ser representado como http://servidor.com/cadastro/produtos/editar_produto.aspx?id=132, agora pode ser simplesmente representado da forma http://servidor/cadastro/produtos/editar/132. A aplicação entende o caminho que está sendo passado e executa a ação certa no local certo com o objeto certo.
Nem sempre um padrão é o melhor em todos os casos. Alguns profissionais dizem que MVC é ideal para 5% dos projetos Web, enquanto 95% ficaram sem opção. Independentemente de opiniões, o MVC toma tempo, bastante tempo e, embora a qualidade final do projeto construído com este design pattern (quando bem aplicado) seja melhor, existem situações em que por falta de tempo não seja possível a sua utilização. É para estes casos que ASP.NET Dynamic Data oferece uma solução.
O mapeamento objeto relacional é realizado por frameworks ORM. Esses frameworks permitem que se crie uma camada de classes de domínio, que posteriormente serão persistidas em um banco de dados relacional. O papel de um framework ORM é abstrair as operações relacionais e de CRUD, liberando assim o desenvolvedor a focar em seu principal objetivo, regras de negócio. Mas para que um framework ORM funcione, é necessário realizar o mapeamento objeto relacional, que de uma maneira simples de explicar, consiste em dizer a esse framework em qual banco de dados SQL, quais tabelas e campos as classes de domínio serão salvas. Existem diversos frameworks ORM para o .NET, dentre eles citamos o NHibernate, que é free e open-source. O Entity framework é um produto da Microsoft e faz parte do .NET framework.
Dynamic Data em perspectiva
Este modelo de projeto foi disponibilizado no Visual Studio e no framework .NET a partir da versão 3.5 Service Pack 1. Sua principal característica é gerar todo o código necessário para realizar CRUD nas tabelas, analisando os metadados do banco de dados. Partindo das classes que são geradas com Linq to SQL ou com o Entity framework são construídos templates e modelos para a geração das páginas ASPX que são usadas na execução do projeto.
Tudo isto é feito com pouco ou nenhum código sendo escrito pelo desenvolvedor que ainda assim, se for necessário, pode fazer adaptações tanto nas páginas e controles gerados como nas classes de dados personalizando comportamento e regras de negócio da aplicação.
Observe as Figuras 1, 2 e 3. Elas apresentam algumas telas usadas em um projeto de exemplo que a Microsoft usa para demonstrar este tipo de projeto.
Figura 1. Listagem das tabelas que podem ser editadas
Figura 2. Listagem da tabela Orders
Figura 3. Edição de dados
Note que as páginas geradas são bem completas, incluindo links e validações de dados para os campos nas páginas para edição de dados. Certamente que dependendo do tipo de projeto algumas adaptações devem ser feitas. Primeiramente o conteúdo é gerado em inglês. Isto em alguns casos pode representar barreiras para o uso da aplicação.
Observe na Figura 2 que até mesmo filtros podem ser aplicados para as listagens. Pense em como isto é complexo de se fazer, mesmo com o ASP.NET você vai precisar escrever algum código.
...