7 puan yazan GN⁺ 2023-06-28 | 1 yorum | WhatsApp'ta paylaş
  • ORM (nesne-ilişkisel eşleyici), yazılım geliştirmede sık sık bir anti-pattern olarak eleştirilir.
  • Ancak bu eleştiri abartılıdır ve ORM'ler, diğer yazılım araçları gibi, özünde kötü değildir.
  • ORM'lerin asıl sorunları çoğu zaman yanlış kullanılmaları veya yanlış anlaşılmalarından kaynaklanır.
  • ORM'ler ve ilişkisel veritabanları farklı paradigmalarla çalıştığı için veri modelleme ve ilişkilerde zorlu problemler ortaya çıkabilir.
  • ORM'ler Tek Sorumluluk İlkesi'ni (SRP) ve İlgi Alanlarının Ayrılması (SOC) ilkesini ihlal eder, ancak bu eleştiriler hiçbir şekilde belirleyici sorunlar değildir.
  • ORM'lerin gerçek sorunları verimlilik ve görünürlüktür.
  • Doğru kullanılmadığında ORM verimsiz olabilir, ancak sorguları optimize etmeye ve performansı artırmaya yardımcı olabilecek özelliklere sahiptir.
  • ORM'nin veritabanına birden fazla gidiş-dönüş yapmasına neden olan N+1 sorunu, data loader kullanılarak hafifletilebilir.
  • ORM'nin en büyük sorunu görünürlük ve debug etmedir. Net hata mesajları vermeyebilir veya sorunları anlamayı ve çözmeyi zorlaştırabilir.
  • Doğru kullanıldığında ORM, ham SQL kadar verimli olabilir; ancak geliştiricilerin sunduğu özelliklerden ve native SQL karşılıklarından yararlanması gerekir.
  • Bazı karmaşık veya sorunlu sorgular için ham SQL sorgularına geçmek gerekebilir.
  • Genel olarak ORM özünde kötü değildir, ancak olası sorunlardan kaçınmak için dikkatli ve bilinçli kullanım gerektirir.

1 yorum

 
GN⁺ 2023-06-28
Hacker News görüşleri
  • ORM'nin sınırlamaları ve dezavantajları, örneğin başka veritabanlarını kullanamama ve SQL bilgisi gerektirmesi gibi nedenlerle eleştiriliyor.
  • Veri katmanını string interpolation ve ham JDBC'ye yakın bir yaklaşımla sorgu sorgu inşa etmek, daha iyi bir yaklaşım olarak görülüyor.
  • ORM'ler çoğu zaman yalnızca temel tablo ve view eşlemeleriyle sınırlı kalıyor ve SQL'in gelişmiş özelliklerini ve yeteneklerini göz ardı ediyor.
  • İki tür ORM vardır: alan modeli temelli olanlar ve mevcut bir veritabanından alan modeli üretenler.
  • jOOQ ve Hibernate gibi farklı uygulama ve özelliklere sahip ORM'ler, her biri farklı amaçlar için kullanılır.
  • ORM'ler, çok sayıda tabloya ve uygun foreign key ilişkilerine sahip karmaşık uygulamalarda faydalı olabilir.
  • String literal içinde ham SQL kullanmak, ORM'ye bir alternatif olarak görülür; sorgu wrapper'ları üreten araçlar da kullanılabilir.
  • Her şeyi paketler halinde gizlemeye çalışmayan veya kendi sorgu dilini tanıtmayan pragmatik ORM'ler tercih edilir.
  • SQLAlchemy, SQL'i yeniden icat etmeden kullanışlı bir sorgu katmanı sunan yaklaşımı nedeniyle övülüyor.
  • ORM kullanılmadığında geliştiricilerin kendi veritabanı arayüzlerini yazıp sürdürmesi gerekir; bu da hatalara ve güvenlik açıklarına yol açabilir.
  • ORM'nin SOLID ilkelerini ihlal ettiğine yönelik eleştiri, akademik öğretiler ile gerçek dünyadaki geliştirme pratiği arasındaki bir çatışma olarak görülüyor.
  • Deneyim eksikliği veya akademik pratiklerin etkisi nedeniyle sorunlar ortaya çıkabilir ve bütçe aşımı yaşanabilir.