Atenção: esse artigo tem uma palestra complementar. Clique e assista!

Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que trata o artigo

Este artigo descreve algumas das capacidades dinâmicas introduzidas na nova versão do framework .NET. Através de um exemplo prático, iremos explorar as mais novas funcionalidades do DLR (Dynamic Language Runtime) e entender como utilizá-las em aplicações reais.


Para que serve

Utilizando as novas capacidades dinâmicas do framework, é possível construir aplicações mais flexíveis, maleáveis e fáceis de adaptar e integrar. Os tipos dinâmicos se integram facilmente com as linguagens dinâmicas incorporadas ao framework, como Python e Ruby.


Em que situação o tema é útil

As funcionalidades dinâmicas podem ser úteis em diversos cenários, dentre eles podemos destacar a criação de web sites de forma rápida e simples, interoperabilidade entre aplicações e bibliotecas, utilização de metaprogramação, dentre outros. Existem diversas aplicações e usos para linguagens e funcionalidades dinâmicas.

Resumo do DevMan

As linguagens dinâmicas tiveram uma grande popularidade na década de 80. Eram bastante utilizadas para a criação de scripts. Pode-se dizer que elas perderam seu espaço na década de 90 para linguagens estaticamente tipadas. Com a grande procura por sistemas distribuídos e sendo executados na web, as linguagens dinâmicas voltaram a ter um grande foco. Suas implementações simples, facilidade de codificação e refatoração são alguns dos fatores positivos que levam ao seu sucesso. Neste artigo abordaremos algumas destas facilidades utilizando duas novas classes do .Net Framework 4.0: ExpandoObject e DynamicObject.

Na versão 4 do .NET framework, capacidades dinâmicas foram incluídas para fornecer flexibilidade às linguagens estaticamente tipadas, como o C# e o VB por exemplo, e também fornecer acesso aos recursos do framework para linguagens dinâmicas como Ruby e Python.

O responsável por tudo isso é uma parte do framework chamada DLR – Dynamic Language Runtime, que faz uma espécie de “meio de campo” entre as linguagens estaticamente tipadas e as linguagens e recursos dinâmicos do framework, como mostra a Figura 1.

Figura 1. Integração do Dynamic Language Runtime

O DLR nos possibilita criar objetos e classes dinâmicas no C# (como veremos adiante neste artigo) e também nos possibilita executar código escrito em linguagens como Python e o Ruby dentro do C# (ou VB).

A partir de agora exploraremos duas novas classes introduzidas no .NET 4.0, que são essenciais para trabalhar com esas capacidades: ExpandoObject e DynamicObject.

A classe ExpandoObject

ExpandoObject representa um objeto que pode ter propriedades e/ou métodos adicionados ou removidos em tempo de execução. O ExpandoObject nos permite criar objetos completamente dinâmicos, que terão seus membros avaliados somente durante a sua execução. Para demonstrar um pouco o funcionamento e utilidade desta classe, iremos criar como exemplo um simples mapeador para uma tabela do banco de dados. Este mapeador irá gerar um objeto do tipo ExpandoObject, onde suas propriedades serão as colunas de uma tabela do banco de dados lidas e geradas na execução do sistema.

Por que usar dynamic?

A utilização de dynamic não fornece suporte a IntelliSense, e também não existem verificações em tempo de compilação, por que então deveríamos utilizar dynamic? As razões podem ser muitas. Talvez algumas aplicações realmente nunca precisem deste tipo de funcionalidade, mas a criação de frameworks e APIs estão sendo muito beneficiadas pelas capacidades dinâmicas do .net e seu desenvolvimento tem sido facilitado.

Um exemplo bem simples de utilização poderia ser na criação de objetos de transferência, ou seja, em locais onde uma classe é utilizada apenas para transferir dados entre camadas ou outras classes/métodos. Estas classes podem ser substituídas pela utilização de um objeto dinâmico, que não necessitaria de manutenção nem recompilações quando os dados a serem transferidos mudam. Outro exemplo de utilização seria para a geração de relatórios, onde geralmente temos objetos que são agrupamentos de dados de diversos outros objetos. A criação e manutenção destes objetos pode ser facilmente substituída por objetos dinâmicos ao invés de trabalhar com conjuntos de dados vindos diretamente do banco de dados.

...

Quer ler esse conteúdo completo? Tenha acesso completo