6 Mart 2015 Cuma

ORM nedir?

ORM nedir?


ORM : Object Relational Mapping, nesne yönelimli dillerde yaratılan nesneleri veritabanlarına bağlayan bir sistemdir. Örneğin java dilinde program yazıyor ve yazdığınız programda yaratılan nesneler bir mysql veritabanına kaydediliyor ve oradan geri okunuyor ise işte burada ORM'den faydalanıyorsunuz demektir.
Yani ORM ile nesneler ile bunların veritabanındaki kayıtları birbirine bağlanıyor, ve programınız ile veritabanındaki kayıtlar arasındaki veri alışverişi yönetiliyor.

Java'da en çok kullanılan ORM araçları : Hibernate, Apache OpenJPA, Toplink, EclipseLink, Apache Cayenne, IBatis, Spring JDBC Template.

ORM neden gerekli?

ORM'nin ortaya çıkma sebebi nesne yönelimli programlama ile ilişkisel veritabanlarının mantıkları arasındaki uyuşmazlıktır. Örneğin Java da nesneler yaratıldığında birbirine bağlı nesnelerden oluşan bir grafik yapısı ortaya çıkıyor. Fakat ilişkisel veritabanlarında veriler tablolar halinde, liste mantığıyla tutuluyor. İşte bu uyumzsuzluk sebebiyle arada bir köprüye ihtiyaç duyuluyor. Bu köprüye ORM deniyor. Adı üzerinde nesne ile onun veritabanındaki temsili arasındaki "mapping" işlevini görüyor.

Diyelim ki bir Employee classı var:

public class Employee {
   private int id;
   private String first_name; 
   private String last_name;   
   private int salary;  

   public Employee() {}
   public Employee(String fname, String lname, int salary) {
      this.first_name = fname;
      this.last_name = lname;
      this.salary = salary;
   }
   public int getId() {
      return id;
   }
   public String getFirstName() {
      return first_name;
   }
   public String getLastName() {
      return last_name;
   }
   public int getSalary() {
      return salary;
   }
}

Bu Employee classının instance larını veritabanında bir tabloya kaydetmek istiyoruz.
create table EMPLOYEE (
   id INT NOT NULL auto_increment,
   first_name VARCHAR(20) default NULL,
   last_name  VARCHAR(20) default NULL,
   salary     INT  default NULL,
   PRIMARY KEY (id)
);

Bu şekilde tabloyu belirlediğimizi farzedelim.
Bu iki tanımlama birbirinden son derece farklı, hatta uyumsuz. Şöyle ki:

1. Granularity: Bazen bir nesne modelinde veritabanındaki tablo sayısından daha fazla class olabiliyor.
2. Inheritance: Veritabanında kalıtım durumu belirtilmiyor.
3. Identity: Veritabanında eşitlik sadece PK larla belirleniyor. Fakat Javada hem identity (a==b) hem de equality (a.equals(b)) şeklinde eşitlik var.
4. Associations : OO dillerde obje referanslarıyla ilişkiler kurulurken, RDBMSde bir FK sütunu ile ilişki kuruluyor.
5. Navigation: Java ile RDBMSde nesneye erişme yöntemleri çok farklı.


ORM'nin artı ve eksileri nelerdir?


ORM'nin artıları:

1. Nesne yönelimli programlamaya uygundur.
2. Kullanılacak veritabanından bağımsız olarak uygulama yazmayı sağlıyor.
3. SQL ya da JDBC kullanmaya gerek kalmadan, az bir kod yazarak veritabanı kullanan bir uygulama yazabilmemizi sağlıyor.
4. ORM raçları genelde open source yani açık kaynaklı olduğundan ücret ödemeye gerek yok.
5. ORM araçları yazılımcıya kolaylık sağlayacak özellikler sunuyor.
6. ORM araçları için gereken eklentiler her IDE için kolayca bulunabiliyor.
vb.

ORM'nin eksileri:

1. Performansı yetersiz kalabiliyor.
2. İşlemin kontrolü tam olarak yazılımcının elinde değildir.
3. ORM araçlarını kullanmayı öğrenmek için çok zaman harcamak gerekiyor (= steep learning curve).

ORM kullanmamak


ORM kullanmak bir seçenektir, kullanmayabilirsiniz.
Uygulamanızı JDBC ve SQL ile de yazabilirsiniz.
Burada dikkat edilmesi gereken şey şu ki, JDBC ile ortaya çıkan problemleri kendiniz halletmek zorunda olacaksınız. Ayrıca ORM araçlarının sağladığı kolaylıklardan da mahrum kalacaksınız.
Bütün bu şartlar sizin için soru olmayacaksa ORM araçları kullanmasanız da olur.


ORM aracı nasıl seçmeli?


ORM aracı seçerken ismine ya da trend olmasına değil, yapacağımız uygulamanın doğasına göre hareket etmek gerekiyor.
Uygulamanın :
1. Büyüklüğü
2. Performansı
3. Deadline yani teslim tarihine kadar olan süre miktarı
bakmamız gereken ana kriterlerdir.

1. Uygulama büyüklüğü
Eğer yazılan uygulamanın veritabanı ile ilişkisi çok basit seviyede ise, ORM aracı kullanılmayabilir.
Ya da basit bir ORM aracı seçilebilir.
Örneğin Spring JDBC Template, IBatis gibi kullanması, öğrenmesi kolay bir ORM aracı yeterlidir.

Eğer ki büyük çaplı bir uygulama yazılıyorsa mutlaka ORM aracı kullanılmasında fayda var. Çünkü bu araçların sağladığı kolaylıklar mutlaka yardımınıza koşacaktır. Büyük bir uygulama için ORM aracı seçerken de uygulamanın kendi ihtiyaçlarına cevap verecek özellikleri tespit ederek on göre karar vermek doğru olacaktır.

2. Performans konusu

...

Hiç yorum yok:

Yorum Gönder