ORM kullanımından ne tür Web geliştirme projeleri yararlanır?


10

Veri tabanımın% 95'ini SQL kullanarak yaptığımı söyleyerek başlayacağım. Son zamanlarda NHibernate ve Doctrine gibi çeşitli ORM'leri araştırdım.

Çok fazla SQL ve bir ORM sağladığı veritabanı taşınabilirliği bilmek gerek kalmadan avantajlarını görebilirsiniz. Ancak SQL'i bilmenin bir ORM ile çalışmayı daha etkili hale getireceğini de görebiliyorum ve kariyerimde bir uygulamanın en büyük değişikliğinin veritabanı satıcısı olacağını sadece bir kez düşünebiliyorum.

SQL yazmaktan çok rahat olduğum ve görünüşe göre bir ORM kullanmanın sıkça öğretilen faydalarını anlayamadığım için, ağır ORM kullanıcılarına sorum şu:

ORM kullanımından en çok ne tür Web geliştirme projeleri yararlanır?


3
Cevap "Hepsi". Ama muhtemelen bilmek istediğiniz şey bu değil. Daha spesifik bilgiler sormak için sorunuzu hassaslaştırmak isteyebilirsiniz.
S.Lott

1
Benim için, SQL şu anda üretilmesi daha kolay, ancak bunun nedeni sadece benim alışkanlığım (veya cehaletim). Ben normal SQL yavaş olduğundan ORM her zaman en iyi seçim olmadığını okudum; ancak, birçok geliştirici bunun genellikle önemli olmadığını belirtmiştir. Çoğunlukla ORM için en uygun projeleri merak ediyorum. Cevapların çoğunun muhtemelen "hepsi" olacağını görebiliyorum ve bu da iyi. Belirli bir cevap aramıyorum. :)
Fred Wilson

Daha fazla ayrıntı istemezseniz, çok fazla şey öğrenemezsiniz.
S.Lott

Yanıtlar:


5

(Neredeyse) tüm uygulamalar ORM'den yararlanır.

İlk olarak, ORM için listelediğiniz avantajları kabul etmiyorum .

  • ORM kullanmak, mutlaka SQL bilmeniz gerekmediği anlamına gelmez. SQL bilgisi, ORM aracının gerçekte ne yaptığını anlamaya yardımcı olacaktır, bu da özellikle hata ayıklama sırasında faydalıdır. Dahası, SQL'in seçtiğiniz ORM yeteneğinin ötesinde karmaşık sorgular geliştirmesi gerekebilir.
  • Ve dediğin gibi, taşınabilirlik gerçek hayatta nadiren bir endişe kaynağıdır.

Bunun yerine, ORM'nin gerçek faydaları :

  • ORM, programcıya zaman kazandırır çünkü SQL'de tonlarca CRUD mantığı yazmayı azaltır
  • birçok ORM, yazması ve hata ayıklaması zor olan karmaşık önbellek mantığı vb. içerir. Bu, zamandan tasarruf etmenin yanı sıra , uygulamanızın güvenilirliğini ve sürdürülebilirliğini de artırabilir (veya en azından aynı sonuçları elde etmenizi sağlayacak zamandan tasarruf etmenizi sağlar)
  • en iyi ORM'lerde ürünü aktif olarak geliştiren, sürdüren ve destekleyen bir kullanıcı topluluğu vardır . Özel SQL çevresindeki topluluk, en iyi ihtimalle, çözmemiz gereken sorunlara biraz daha az odaklanmıştır.

Yorumda bulunduğunuz gibi, ORM'in bir tarafı performans kaybıdır. Ancak, bu genellikle daha fazla donanım harcanarak dengelenebilir.

Tipik olarak, programcı zamanı donanımdan daha pahalıdır, bu nedenle ORM, el kodlaması SQL yerine genellikle iyi bir seçenektir.

ORM, oldukça basit bir CRUD veritabanı mantığı olan uygulamalar için en iyisidir. ORM aşağıdakiler için daha az etkilidir :

  • Çok az veritabanı erişimi gerektiren / çok az veritabanı gerektiren uygulamalar.
  • Büyük ölçüde karmaşık sorgulara ve çok az basit CRUD mantığına bağımlı uygulamalar
  • Performansın kritik olduğu, ancak daha hızlı donanım dağıtma olasılığının olmadığı durumlar

Deneyimlerime göre, bu durumlar nadirdir. Bu yüzden cevabım.


"ORM kullanmak, SQL bilmeniz gerekmediği anlamına gelmez." - Çok doğru. Bir ekip ortamında gördüğüm avantajlardan biri, SQL beceri setini iş katmanında çalışan her geliştiricinin uzman olması gerekmediği için konsantre edebilmemizdir.
Fred Wilson

1
Karmaşık sorgular için her zaman SQL'e geri dönebilir ve bir SQL sorgusu yazabilirsiniz.
harsimranb

4

SQL yazarken de rahatım. Ben de herhangi bir SQL yazmak zorunda değil, aynı zamanda bir veritabanına bağlanma, bağlantı kesme, havuzlama, vb endişe değil çok daha rahat.

Yani .. Sorunuzun olumsuz yanıtını vereceğim. Bir ORM'den FAYDALI OLMAYAN tek web geliştirme projeleri, bir veritabanıyla hiç konuşmayan projelerdir. Hangi inanıyorum azınlık (varsa).


+1: Ayrıca kendimi sql'de çok yetkin görüyorum, ancak yine de bir OR / M'yi tercih ediyorum. Aslında bir OR / M'yi iyi kullanmak için kesinlikle sql üzerinde bir sapa sahip olmanız gerektiğini söyleyebilirim, aksi takdirde soyutlama sızıntı yaptığında, sorunu asla bulamazsınız. "fazla SQL bilmek gerek yok" bir özellik değildir. Benim için her şey verimlilik kazanımları ve derleyicinin çalışma zamanını değil, OR / M'nin problemlerini bulmasını sağlamaktır (özellikle daha yeni jenerikler / linq tabanlı olanlar bu konuda harika).
Brook

@Brook - Bütün kalbimle katılıyorum. Bir OR / M kullanmak, SQL bilgisinin isteğe bağlı olduğu anlamına gelmez.
Otávio Décio

2

ASP.NET WebForms ile yaşadığım deneyime dayanarak, durum bilgisi olan web çerçeveleri kullanan web projelerinin ORM kullanmaktan en fazla yarar sağlayacağını öneriyorum .

Durum bilgisi olan bir çerçevede, etkin sunucu denetimleri hiyerarşisine bağlı olarak işaretleme otomatik olarak perde arkasında oluşturulur. Bu denetimlerin durumlarını veritabanına otomatik olarak yüklemesi ve sürdürmesi cazip gelebilir. ORM bu noktada yardımcı olur.

Boru hattının (HTML çıktısı) sonunu bir şekilde soyutlarsınız ve doğal olarak başlangıçla (veri kaynağı) aynı şekilde başa çıkmaya davet eder, böylece sadece uygulama kodunda iş mantığınızda kalırsınız.

Bunun bir şeyler yapmak için iyi bir yol olduğunu söylemediğimden değil. ORM'in doğal olarak uyduğu yer.


2

Büyük, çok bağlantılı bir nesne modeline sahip olduğunuz uygulamalarda, ORM aynı eklemeleri tekrar tekrar yazmanızı önler.

Başka bir avantaj, api'nin istemcisinin bu grafiğin yalnızca bir alt kümesini kullanacağı bir api'nin bir nesne grafiğini döndürmesini istediğiniz tembel yüklemedir.


1

Bir ORM'yi bir DBAL ile karıştırdığınıza inanıyorum .

Bahsettiğiniz kavram, temel veritabanı sistemine bağlı olmayan taşınabilir "sql" yazmanıza izin veren bir Veritabanı Soyutlama Katmanıdır (DBAL).

Öte yandan bir ORM (her zaman bir DBAL üzerine inşa edilmiştir (neredeyse?)):

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. (Vikipedi)

Basitçe söylemek gerekirse, bir ORM, verileri düz bir veritabanından şişirilmiş bir nesne temsiline dönüştürmenize izin verir.


Açıklama için teşekkürler. ORM'e taşınmamın temel nedeni, daha fazla OOP'ye odaklanmak ve bazı projeler için mantıklıysa SQL yazmaktan uzaklaşmaktır.
Fred Wilson

1

ORM'den yararlanamayan projeler:

  • nesne yönelimli olmayanlar;
  • veriyi sürdürmesi gerekmeyenler;
  • nesne yönelimli DB kullanan, bu nedenle ek eşleme katmanına gerek yoktur;
  • ilişkisel olmayan NoSQL çözümü kullanan;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.