Que tipo de projetos de desenvolvimento da Web se beneficiam do uso do ORM?

10

Começarei dizendo que fiz 95% do meu trabalho de banco de dados usando SQL. Recentemente, fiz uma investigação de várias ORMs, como NHibernate e Doctrine.

Eu posso ver as vantagens de não precisar conhecer muito SQL e a portabilidade do banco de dados que um ORM fornece. Mas também vejo que o conhecimento do SQL tornará o trabalho com um ORM mais eficaz e só posso pensar em uma vez na minha carreira que a maior mudança de um aplicativo seria o fornecedor do banco de dados.

Como estou muito confortável escrevendo SQL e aparentemente não estou percebendo os benefícios frequentemente ensinados do uso de um ORM, minha pergunta aos usuários pesados ​​do ORM é esta:

Que tipo de projetos de desenvolvimento da Web se beneficiam mais com o uso do ORM?

Fred Wilson
fonte
3
A resposta é "Todos eles". Mas isso provavelmente não é o que você quer saber. Você pode refinar sua pergunta para obter informações mais específicas.
S.Lott
11
Para mim, atualmente, o SQL é mais fácil de produzir, mas isso é apenas por causa da minha aclimatação (ou ignorância). Eu li que o ORM nem sempre é a melhor opção porque é mais lento que o SQL normal; no entanto, muitos desenvolvedores afirmaram que isso geralmente não é importante. Estou principalmente curioso sobre os projetos mais adequados para o ORM. Eu posso ver que a maioria das respostas provavelmente será "todas", e isso também é bom. Não estou procurando uma resposta específica. :)
Fred Wilson
Se você não pedir mais detalhes, não aprenderá muito.
S.Lott

Respostas:

5

(Quase) todos os aplicativos se beneficiam do ORM.

Primeiro, não concordo com as vantagens que você lista para o ORM .

  • Usar ORM não significa necessariamente que você não precisa conhecer SQL. Um conhecimento de SQL ajudará a entender o que a ferramenta ORM está realmente fazendo, o que é especialmente útil durante a depuração. Além disso, o SQL pode realmente ser necessário para desenvolver consultas complexas que estão além da capacidade do ORM escolhido.
  • E, como você diz, a portabilidade raramente é uma preocupação na vida real.

Em vez disso, os benefícios reais do ORM são:

  • O ORM economiza tempo do programador porque economiza toneladas de lógica CRUD no SQL
  • muitos ORMs incluem lógica de cache complexa etc., difícil de gravar e depurar. Além de economizar tempo, isso pode melhorar a confiabilidade e a capacidade de manutenção do seu aplicativo (ou pelo menos economizar o tempo necessário para obter os mesmos resultados)
  • os melhores ORMs têm uma comunidade de usuários que ativamente desenvolvem, mantêm e dão suporte ao produto. A comunidade em torno do SQL personalizado é, na melhor das hipóteses, um pouco menos focada nos problemas que precisamos resolver.

Como você comenta, um lado negativo do ORM é a perda de desempenho. No entanto, isso geralmente pode ser compensado gastando mais hardware.

Normalmente, o tempo do programador é mais caro que o hardware; portanto, o ORM é geralmente uma boa opção, em vez de codificar manualmente o SQL.

O ORM é melhor para aplicações com muita lógica de banco de dados CRUD bastante simples. ORM é menos eficaz para :

  • Aplicativos que precisam de pouco / nenhum acesso ao banco de dados.
  • Aplicativos que dependem amplamente de consultas complexas e muito pouca lógica CRUD simples
  • Situações em que o desempenho é crítico, mas onde não há possibilidade de implantar hardware mais rápido

Na minha experiência, essas situações são raras. Daí a minha resposta.

Kramii
fonte
"Usar ORM não significa necessariamente que você não precisa conhecer SQL." - Tão verdade. Uma das vantagens que vejo em um ambiente de equipe é que podemos concentrar o conjunto de habilidades SQL para que nem todo desenvolvedor que trabalha na camada de negócios precise ser um especialista.
Fred Wilson
11
Para consultas complexas, você sempre pode voltar ao SQL e gravar uma consulta SQL.
harsimranb
4

Também me sinto confortável escrevendo SQL. Também me sinto muito mais confortável em não precisar escrever SQL, além de não me preocupar em conectar, desconectar, agrupar etc em um banco de dados.

Então .. eu vou responder o negativo da sua pergunta. Os únicos projetos de desenvolvimento da Web que NÃO se beneficiam de um ORM são os que não estão falando com um banco de dados. Que eu acredito ser a minoria (se houver).

Otávio Décio
fonte
+1: Eu também me considero muito proficiente em sql, mas ainda prefiro um OR / M. Na verdade, eu diria que você definitivamente precisa ter um identificador no sql para fazer bom uso de um OR / M; caso contrário, quando a abstração vazar, você nunca encontrará o problema. "não precisa saber muito SQL" não é um recurso. Para mim, trata-se de ganhos de produtividade e de o compilador encontrar os problemas, não o tempo de execução e os OR / M (especialmente os mais recentes baseados em genéricos / linq são ótimos nisso).
18711 Brook
@ Brook - concordo plenamente. O uso de um OR / M não significa que o conhecimento sobre SQL seja opcional.
Otávio Décio
2

Com base na minha experiência com o ASP.NET WebForms, proponho que os projetos da Web que utilizam estruturas da Web com estado são os que mais se beneficiam com o uso de um ORM.

Com uma estrutura estável, a marcação é gerada automaticamente nos bastidores, com base na hierarquia dos controles ativos do servidor. É tentador fazer com que esses controles sejam carregados e persistam seu estado automaticamente no banco de dados. É aqui que o ORM ajuda.

Você meio que abstrai o final do pipeline (saída HTML) e é naturalmente convidativo lidar com o início (fonte de dados) da mesma maneira, para que você permaneça apenas dentro da lógica de negócios no código do aplicativo.

Não que eu não esteja dizendo que essa é uma boa maneira de fazer as coisas. É exatamente onde o ORM se encaixa naturalmente.


fonte
2

Nos aplicativos em que você possui um modelo de objeto grande e muito conectado, um ORM evita que você escreva as mesmas junções repetidas vezes.

Outro benefício é o carregamento lento, em que você deseja que uma API retorne um gráfico de objeto em que o cliente da API use apenas um subconjunto desse gráfico.

Paul Sanwald
fonte
1

Acredito que você esteja confundindo um ORM com um DBAL .

O conceito ao qual você está se referindo é uma DBAL (Database Abstraction Layer) que permite escrever "sql" portátil que não depende do sistema de banco de dados subjacente.

Por outro lado, um ORM (que quase sempre é construído sobre um DBAL):

Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. (Wikipedia)

Simplificando, um ORM permite converter dados de um banco de dados simples em uma representação de objeto inflada.

Craige
fonte
Obrigado pelo esclarecimento. O principal motivo para eu mudar para o ORM é focar mais no OOP e deixar de escrever tanto SQL, se isso fizer sentido para alguns projetos.
11557 Fred
1

Projetos que não se beneficiariam com ORM seriam:

  • os que não são orientados a objetos;
  • os que não precisam persistir dados;
  • os que usam DB orientado a objeto, portanto, não precisam de camada de mapeamento adicional;
  • os que usam solução NoSQL não relacional;
vartec
fonte