ORM nedir, nasıl çalışır ve bir tanesini nasıl kullanmalıyım? [kapalı]


230

Birisi, tasarladığım bir proje için ORM kullanmamı önerdi, ancak ne olduğu veya nasıl çalıştığı hakkında bilgi bulmakta sorun yaşıyorum.

Herkes bana bir ORM nedir ve nasıl çalışır ve bir kullanmaya nasıl başlamalıyım hakkında kısa bir açıklama verebilir?


8
Bu soruyu buldum ama 2009'dan beri ve zaten ORM'de usta olup olmadığınızı bilmiyorum, ancak CodePlex C #'da Entity Framework'ü arayın ( entityframework.codeplex.com ) İşte öğrenebileceğiniz kaynak kodu. Ayrıca bunu okuyabilirsiniz. ( dbtechnet.org/labs/dae_lab/Orm.pdf )
Maximus Decimus

1
Sadece ORM kamının Object-Role Modeling ile de en.wikipedia.org/wiki/Object-role_modeling
O-9

1
Bu yararlı bir soru ve en iyi cevap için verilen oylar bunu doğrulamaktadır. ORM'nin ne olduğuna dair kısa bir açıklama görüş gerektirmez. Kullanıcının başlamak için bir bağlantı istediğinden, soru konu dışı olarak işaretlenir. Bunun moderatörler tarafından sık sık aşırı tepki olduğunu hissediyorum.
NeilG

3
@NeilG Kapalı bir soru, sorunun konu dışı olduğu anlamına gelir. Cevaplarda yararlı bilgiler olabilir, ancak bu konu ile ilgili soruyu ortaya çıkarmaz. Ayrıca, silinmeyecek, burada kalacak, ancak yine de en iyi şekilde çalışması için SO temiz ve konu üzerinde tutmamız gerekiyor. Yani, ilk yorumunuzu cevaplamak için: Bu yararlı bir soru değil, faydalı cevaplar var.
E

1
@NeilG Sorun, sorunun kaynaklara yönelik bir istek içermesidir (hem başlıkta hem de soruda). Bu tür talepler konu dışıdır, çünkü buradaki cevapların birçoğunda olduğu gibi insanların en sevdikleri kaynaklara bir bağlantı göndermesiyle sonuçlanır. Kaynak talebinin sorudan kaldırılması, mevcut bazı cevapları geçersiz kılacaktır. Normal kullanıcılar olarak, yanıtları geçersiz kılmak için soruyu düzenlememize izin verilmez . Bu nedenle, kapatılmalıdır. Soru cevaplanmamışsa, bu istekleri kaldırmak ve açık bırakmak için düzenlenebilir.
Makyen

Yanıtlar:


483

Giriş

Nesne İlişkisel Eşleme (ORM), nesne yönelimli bir paradigma kullanarak veritabanındaki verileri sorgulamanızı ve değiştirmenizi sağlayan bir tekniktir. ORM hakkında konuşurken, çoğu insan Nesne İlişkisel Haritalama tekniğini uygulayan bir kütüphaneye , dolayısıyla "ORM" ifadesine başvurur.

ORM kütüphanesi, kendi dilinizde yazılmış, verileri işlemek için gereken kodu içeren tamamen sıradan bir kütüphanedir, böylece artık SQL kullanmazsınız; kullandığınız dilde bir nesneyle doğrudan etkileşim kurarsınız.

Örneğin, sahte bir dili olan tamamen hayali bir durum:

Bir kitap sınıfınız var, yazarın "Linus" olduğu tüm kitapları geri almak istiyorsunuz. Manuel olarak böyle bir şey yaparsınız:

book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
     book = new Book();
     book.setAuthor(row.get('author');
     book_list.add(book);
}

Bir ORM kütüphanesi ile şöyle görünecektir:

book_list = BookTable.query(author="Linus");

Mekanik parça, ORM kütüphanesi aracılığıyla otomatik olarak halledilir.

Lehte ve aleyhte olanlar

ORM kullanmak çok zaman kazandırır çünkü:

  • NEM ALMA : Veri modelinizi yalnızca tek bir yere yazarsınız ve kodu güncellemek, bakımını yapmak ve yeniden kullanmak daha kolaydır.
  • Veritabanı işlemeden I18N'ye kadar birçok şey otomatik olarak yapılır .
  • MVC kodu yazmaya zorlar , bu da sonunda kodunuzu biraz daha temiz hale getirir.
  • Kötü biçimlendirilmiş SQL yazmak zorunda değilsiniz (gerçekte çok güçlü ve karmaşık bir dil olduğunda, SQL bir "alt" dil gibi davranılır, çünkü çoğu Web programcısı bunu gerçekten emer).
  • Hijyenik; hazırlanmış ifadeler veya işlemler kullanmak bir yöntemi çağırmak kadar kolaydır.

ORM kitaplığı kullanmak daha esnektir, çünkü:

  • Doğal kodlama yönteminize uyuyor (sizin diliniz!).
  • DB sistemini soyutlar, böylece istediğiniz zaman değiştirebilirsiniz.
  • Model, uygulamanın geri kalanına zayıf bir şekilde bağlıdır, böylece onu değiştirebilir veya başka bir yerde kullanabilirsiniz.
  • Baş ağrısı olmadan veri mirası gibi OOP iyiliğini kullanmanızı sağlar.

Ancak ORM bir acı olabilir:

  • Öğrenmeniz gerekiyor ve ORM kütüphaneleri hafif araçlar değil;
  • Ayarlamanız gerekiyor. Aynı sorun.
  • Her zamanki sorgular için performans uygundur, ancak bir SQL yöneticisi büyük projeler için kendi SQL'i ile her zaman daha iyisini yapar.
  • DB'yi soyutlar. Sahnenin arkasında neler olduğunu biliyor olsanız da sorun olmasa da, bir fordöngüde ağır bir vuruş gibi çok açgözlü ifadeler yazabilen yeni programcılar için bir tuzak .

ORM hakkında nasıl bilgi edinebilirim?

Birini kullan. Hangi ORM kütüphanesini seçerseniz seçin, hepsi aynı prensipleri kullanır. Buralarda birçok ORM kütüphanesi var:

Web programlamasında bir ORM kütüphanesini denemek istiyorsanız, aşağıdaki gibi bir çerçeve yığınını kullanmanız daha iyi olur:

  • Symfony (PHP, Propel veya Doktrini kullanarak).
  • Django (Python, dahili bir ORM kullanarak).

Bir şey öğrenmeye çalışmadığınız sürece kendi ORM'nizi yazmaya çalışmayın. Bu devasa bir iş parçası ve eskileri güvenilir hale gelmeden önce çok zaman ve iş aldı.


50

Biri bana kısa bir açıklama yapabilir mi?

Elbette.

ORM "Nesneden İlişkisel Haritaya" anlamına gelir.

  • Nesne parçası da programlama dili ile kullanmak bir (bu durumda piton) 'dir

  • İlişkisel kısmı İlişkisel Veritabanı Yöneticisi Sistemi (A veritabanı) orada veritabanlarının diğer türleri vardır ama en popüler ilişkisel olduğu (Bildiğiniz tablolar, sütunlar, pk fk vs gibi Oracle MySQL, MS-SQL)

  • Ve son olarak Eşleme kısmı, nesneleriniz ve tablolarınız arasında bir köprü yaptığınız yerdir.

ORM çerçevesini kullanmadığınız uygulamalarda bunu elle yaparsınız. Bir ORM çerçevesi kullanmak, çözümü oluşturmak için gereken ısı yalıtım levhasını azaltmanıza olanak tanır.

Diyelim ki bu nesneye sahipsiniz.

 class Employee:
      def __init__( self, name ): 
          self.__name = name

       def getName( self ):
           return self.__name

       #etc.

ve masa

   create table employee(
          name varcar(10),
          -- etc  
    )

Bir ORM çerçevesi kullanmak, o nesneyi otomatik olarak bir db kaydı ile eşlemenize ve aşağıdaki gibi bir şey yazmanıza olanak tanır:

   emp = Employee("Ryan")

   orm.save( emp )

Ve çalışanı DB'ye taktırın.

Hata! Kısa değil ama umarım okuduğunuz diğer makaleleri yakalamak için yeterince basittir.


17

ORM (Nesne İlişkisel Eşleyici), kod Nesnelerinizi veritabanınıza eşlemeye yardımcı olan bir yazılım parçasıdır.

Bazıları diğerlerinden daha fazla yönleri ele alır ... ancak amaç Veri Katmanı'nın ağırlığının bir kısmını geliştiricinin omuzlarından çıkarmaktır.

İşte Martin Fowler'ın kısa bir klibi (Veri Eşleyici):

Kurumsal Uygulama Mimarisi Veri Eşleyicilerinin Kalıpları


4

Tüm kısaltmalar gibi belirsizdir, ancak bunların nesne-ilişkisel eşleştirici anlamına geldiğini varsayıyorum - gözlerinizi örtmenin ve altında SQL olmadığına inanmanın bir yolu, ama daha ziyade hepsi nesneler ;-). Tabii ki gerçekten doğru değil ve sorunsuz değil - her zaman renkli Jeff Atwood, ORM'yi CS ;-) Vietnamı olarak tanımladı . Ancak, çok az SQL biliyorsanız veya hiç bilmiyorsanız ve oldukça basit / küçük ölçekli bir sorununuz varsa, size zaman kazandırabilirler! -)


2

Nesne Modeli aşağıdaki üç kavramla ilgilidir Veri Soyutlama Kapsülleme Kalıtım İlişkisel model, bir ilişkinin veya tablonun temel kavramını kullanmıştır. Nesne-ilişkisel eşleme (VEYA eşleme) ürünleri, nesne programlama dili yeteneklerini ilişkisel veritabanlarıyla bütünleştirir.

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.