O que é um ORM?

Você que é desenvolvedor de aplicações orientadas a objetos, sabe que de alguma maneira precisa armazenar e recuperar informações em bancos de dados relacionais. Um ORM (Object-Relational Mapping) é um Framework ou um conjunto de classes que permite que você faça este trabalho sem precisar escrever códigos de conexão com o banco, querys de SQL a todo momento, preservando as características de orientação a objetos da linguagem face à natureza relacional dos bancos de dados atuais.

Vantagens de se usar um ORM

  • Você escreve menos código e programa com muito mais produtividade.
  • Seu código fica mais elegante.
  • É mais fácil de dar manutenção no projeto.
  • Melhora a padronização da sua aplicação.

Exemplo de um código em .NET usando ORM:


Usuario.AddNew();  

Usuario.FirstName = this.txtFirstName.Text;  

Usuario.LastName = this.txtLastName.Text;  

Usuario.Save();

Exemplo de um código em.NET usando classes nativas do .NET Framework:


strConn = "string de conexão aqui";

SqlConnection objCon = new SqlConnection(strConn);

SqlCommand objComand = objCon.CreateCommand();

objComand.CommandText = "insert into Usuario (FirstName , LastName ) values (@FirstName , @LastName )";

objComand.CommandType = CommandType.Text;

objComand.Parameters.Add("@FirstName  ", txtFirstName.Text );

objComand.Parameters.Add("@LastName  ", txtLastName.Text );

objComand.ExecuteNonQuery();

É importante ressaltar que dificilmente você achará uma solução que substitua 100% das classes do ADO.NET, eventualmente você será obrigado a fazer uma gambiarra no meio do caminho para obter determinados resultados. No entanto, seguramente os melhores Frameworks resolverão mais de 95% das suas necessidades.

Como escolher um ORM

Estes são os critérios que utilizo quando escolho um ORM para adoção dentro de uma empresa ou projeto.

  • Qualidade da documentação
  • Tipo e qualidade do suporte
  • Custo
  • Curva de aprendizado
  • Continuidade (Novos releases do projeto e periodicidade)
  • Capacidade de execução de stored procedures do legado
  • Bancos de dados suportados
  • Suporte a querys dinâmicas
  • Suporte a dados hierarquizados
  • DataBind a .Net controls
  • Capacidade de fazer transações
  • Performance
  • Facilidade de manutenção do código (incluindo aí a inteligibilidade do mesmo)

Normalmente, o frameworks que existem atuam como geradores de código criando classes baseadas nas suas tabelas de banco de dados.

Existem vários frees e pagos. Os frees normalmente carecem de suporte e documentação, os pagos conseguem suprir melhor esta deficiência por um motivo óbvio. Os melhores frees são o que possuem amplo apoio da comunidade ou têm um grupo de desenvolvedores bastante ativos distribuindo novos releases num curto espaço de tempo.

Nota do autor: Estou referenciando os frees como aqueles que você pode usar sem pagar pela licença de uso. Isso não quer dizer que eles sejam Open Source, Software Livre, GPL ou FreeWare nem nada, ok? Não estou entrando neste mérito. Veja no site do produto a forma de utilização, licenciamento e distribuição de cada um para saber mais.

Análise de alguns dos principais ORMs

Procurando no Google e em sites especialidados, descobri mais de 40 deles. Boa parte já teve seu desenvolvimento abandonado (a maioria Free), mas os melhores têm conseguido sobreviver.

Eu separei a lista em Inativos, Free e Pagos. Os Inativos são o que não têm tido releases lançados nos últimos anos e tiveram seu desenvolvimento paralizado, provavelmente.

Os critérios que utilizei para avaliação final foi estritamente pessoal. Em caso de dúvidas, baixe o framework e teste-o para ter uma opinião própria. Uma boa parte eu instalei e testei, mas a maioria eu não pude fazê-lo por pura falta de tempo.

Produtos Inativos

PRODUTO SITE VERSÃO STATUS
DotNorm http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=b03d0b52-8d32-47a3-bdda-d84e23717d7d== Versão Beta 0.9.1 Inativo
Eldorado.NET http://sourceforge.net/projects/eldorado-net/ Versão Beta 0.1 Inativo
JC Persistent Framework http://sourceforge.net/projects/jcframework/ Versão 2.2 Inativo
ObjectBroker http://sourceforge.net/projects/objectbroker/ Nenhum release Inativo
OPF.Net (Object Persistent Framework) http://sourceforge.net/projects/opfnet/ Versão 1.0 Inativo
ORM.NET http://www.olero.com/ Versão 1.7 Inativo
Sisyphus Persistence Framework http://sourceforge.net/projects/sisyphuspf/ Versão 1.2.7 Inativo
iBATIS.NET http://sourceforge.net/projects/ibatisnet/ Versão 1.2 Inativo
NEO http://neo.codehaus.org/ Versão 1.4.2 Inativo

Produtos Frees

PRODUTO SITE VERSÃO CARACTERÍSTICAS SUPORTE DOC. AVALIAÇÃO FINAL
Gentle.NET http://www.mertner.com/confluence/display/Gentle/Home Versão 1.2.9 Persistência, Querys, Cache, Relacionamento. Forum Boa Bom produto, mas bem limitado.
MyGeneration http://www.mygenerationsoftware.com/ Versão 1.2 Gerador de código baseado em templates e banco de dados. Os recursos dependem dos templates. Forum Boa Bom produto, mas tem uma proposta diferente por gerar código através de templates disponíveis pela comunidade.
Subsonic http://www.codeplex.com/actionpack Versão 2.0.1 Persistência, Coleções, Suporte a alguns bancos, Querys, Configuração rápida, Releases rápidos Forum Média Excelente produto, configuração rápida, desenvolvimento de releases muito rápidos. Tem tudo para fazer sucesso num curto espaço de tempo, mas precisa amadurecer um pouco mais ainda.
NHibernate https://nhibernate.info/ Versão 5.2.7 Persistência, Herança, Relacionamento, Querys, Suporte a vários bancos, Transações e muito mais. Forum Boa Excelente produto, derivado no famoso Hibernate. É o melhor de todos, mas possui curva de aprendizado elevada e configuração por XML delicada. Se você não estiver com pressa, vale à pena investir tempo aprendendo.
DataTier Generator http://sourceforge.net/projects/csharpdatatier/ Versão 4 Gerador de código puro, apenas SQL Server. Forum Ruim Produto simples e limitado.
CODUS http://www.adapdev.com/codus/ Versão 1.4.0 Persistência, Herança, Relacionamento, Suporte a vários bancos, Querys, NUnit, WebServices, Coleções, Suporte a Nhibernate/Ibatis,Gentle. Forum Boa Produtos excelente, trabalha com outros ORMs.
ObjectMapper http://www.objectmapper.com/Home/Default.aspx Versão 2005 IDE UML que mapeia para o ORM (Npersist e Nhibernate). Forum Boa Produto excelente, ajuda no desing das classes do mapeamento em XML.

Produtos Pagos

PRODUTO SITE VERSÃO CARACTERÍSTICAS PREÇO SUPORTE DOC. AVALIAÇÃO FINAL
LLBLGen Pro http://www.llblgen.com/ Versão 2.0 Persistência, IDE Própria, Suporte a vários bancos, Relacionamento, Herança, Coleções, Querys. EUR 229,00 Forum e E-mail Boa Produto bom, custo/benefício bom.
DataObjects.NET http://www.x-tensive.com/Products/DataObjects.NET/ Versão 3.9 Persistência, Herança, Relacionamento, Querys, Suporte a vários bancos, Transações, Segurança, Remoting. Free até EUR 395,00 Forum e E-mail Boa Excelente produto, custo/benefício médio.
NDO.NET http://www.netdataobjects.com/ Versão 1.2 Persistência, Herança, Relacionamento, Querys, Suporte a vários bancos. Free até US$999,00 Forum e E-mail Boa Produtos médio, custo/benefício médio.
Nolics.NET http://www.nolics.net/ Versão 4.2 Persistência, Querys, Coleções Não informado Forum e E-mail Boa Produto limitado
FastObjects.NET http://community.fastobjects.com/community_fastobjects_net.htm Beta Persistência, Coleções, Integração com VS2003, Foco em outras linguages. Não informado Forum e E-mail Ruim Produto limitado, sem foco em .NET, atrasado no desenvolvimento
Persistor http://www.persistor.net/ Versão 1.3.1 Persistência, Herança, Relacionamento, Querys, Suporte a vários bancos. US$1249,00 Forum Normal Produto bom, custo/benefício ruim.
Entity Spaces http://www.entityspaces.net/Portal/Default.aspx Versão 2007 Persistência, Coleções, Suporte a vários bancos, Querys, Transação, DataSource Próprio, SQL CE, LINQ, Geração de Grids automaticamente. US$149,00 Forum e E-mail Boa Excelente produto, custo/benefício excelente, releases rápidos. Vale cada centavo.
eXpress Persistent Objects http://www.devexpress.com/products/net/xpo/index.asp Versão 2007.1.3 Persistência, Querys, Coleções, Transação. US$149,00-199,00 Forum e E-mail Boa Bom produto, custo/benefício bom.
TierDeveloper http://www.alachisoft.com/ Versão 5.6 Persistência, Herança, Relacionamento, Suporte a vários bancos, Transações, Ajax, WebServices, Grids. US$1495,00 Forum e E-mail Boa Excelente produto, custo/benefício médio, preço alto.
RapTier http://www.sharppower.com/ Versão 1.4.2 Persistência, Herança, Relacionamento, Suporte a vários bancos, Transações, Grids. US$299-499,00 Forum e FAQ Boa Produto bom, custo/benefício médio.
Wilson ORMapper for .NET http://www.ormapper.net/ Versão 1.0 Persistência, Herança, Relacionamento, Suporte a vários bancos. US$50,00 Forum Ruim Produto médio, custo/benefício médio.
DEV Force http://www.ideablade.com/ Versão 3.5 Persistência, Herança, Relacionamento, Suporte a vários bancos, WebService, Integração com o VS, Transação, Segurança. Free até US$4.500,00 Fórum e E-mail Boa Produto bom, custo/benefício ruim. Proibitivo.

Entre os Frees, e destaco os seguintes projetos que merecem um acompanhamento:

  • NHibernate
  • SubSonic
  • Codus
  • ObjectMapper

O NHibernate e o Subsonic são os que têm mais futuro, na minha opinião, pelo apoio da comunidade que desenvolve os projetos.

Baseado no Hibernate do JAVA, o NHibernate é Framework extremamento completo e poderoso, no entanto, eu particularmente não gosto de ficar configurando arquivos em XML para ele funcionar, além dele ser um pouco mais complicado de ser mexer do que os outros. Existem alguns geradores de código como o próprio MyGeneratiom e Codus que facilitam o trabalho de configuração do XML.

O SubSonic tem a grande vantagem de a configuração ser quase nula. Ele lê o schema do banco de dados e gera as classes de mapeamento quando você dá o primeiro build no projeto. O releases são muito rápidos permitindo que diversos bugs sejam corrigidos e as melhorias sejam implementadas num curto espaço de tempo. Eu gostei muito de mexer nele, é realmente muito simples. Só precisa amadurecer um pouco mais.

Entre os Pagos, os seguintes projetos se destacaram pelo custo/benefício.

  • Entity Spaces
  • LLBLGen Pro
  • eXpress Persistent Objects

Eu adquiri uma licença do Entity Spaces e está valendo o investimento. Estou em fase de aprendizado e implantação ainda. Eu particularmente gosto da idéia de se pagar por um produto destes por conta da documentação que é muito completa e do suporte que é rápido.