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?
Respostas:
(Quase) todos os aplicativos se beneficiam do ORM.
Primeiro, não concordo com as vantagens que você lista para o ORM .
Em vez disso, os benefícios reais do ORM são:
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 :
Na minha experiência, essas situações são raras. Daí a minha resposta.
fonte
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).
fonte
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
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.
fonte
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.
fonte
Projetos que não se beneficiariam com ORM seriam:
fonte