NHibernate kurumsal yazılım geliştirmede sıkça kullanılan açık kaynak kodlu bir Object-Relational Mapping(ORM) aracıdır.
NHibernate
Session: Veritabanı’na bağlantı veri çekimi ve basit bir “Unit of Work” implementasyonu
ICreteria API: Tekrar kullanılabilir, hızlı sorgular üretmek için bir yöntem. LINQ’da kullanılan Extension Methods’a oldukça benze yapıda; ancak kolon isimleri vb. bilgiler stringler halinde verilmek zorunda kalınıyor.
HQL: String bazlı Object’ler üzerine de uygulanabilen bir sorgu dili.
Schema Mapping: Database’deki hangi tabloların hangi nesnelerle; hangi kolonların, hangi property’lerle; eşleşeceğini, Relation(Association)ların neler olduğunu belirttiğimiz hbm.xml dosyalarıdır.
Dialect: NHibernate’in hangi database dilini kullanması gerektiğini belirttiğimiz Database’e özel dil. Mesela biz burada Oracle9 Dialect’ini seçersek Oracle’a özel (9 ve üstünün desteklediği ek özellikleri de kullanabilen) dil sözlüğünü kullamasını söylemiş oluruz.
Genel yapı şekildeki gibidir.
1. NHibernate üzerinden HQL ya da ICreteria API’si sayesinde sorguda bulunuruz.
2. XML Schema dosyalarına ve NHibernate Configurasyonuna göre gerekli DB’ye bağlanılır.
3. Konfigurasyona göre seçili DB’ye özel SQL tümcesi oluşturulur ve veri çekme işlemi başlatılır.
4. DB’den dönen Relational veriler nesnelere dönüştürülür.
5. Session sayesinde üzerinde işlem yapılan nesneler, transaction.commit() ya da flush() komutları ile topluca kaydedilir.(Gerekli durumlarda eş zamanalılık(concurrency) kontrolleri gerçekleştirilir.)
Kullanılan Mimarinin Artıları
Sadece tek satır kod ile Sayfalama, Sıralama, Ekleme, Silme, Değiştirme işlemleri çok hızlı bir şekilde gerçekleştirilebildi. İsteğimize özel sorgular Service sınıfının içine koyularak kolay bir katmanlama söz konusu olabilir.
Kullanılan Mimarinin Eksiklikleri
ObjectDatasource nesne kullanımında nesneler arasındaki ilişkileri ifade etmede bazı sıkıntıları bulunuyor. Özellikle Asp.Net’in DataBinding yapısı Eval komutu ile ilişkili nesneleri gösterebiliyorken Bind yapısının kullanımına izin vermiyor. Ancak bu problemler NhibernateDataSource adlı open source projede ortadan kaldırılmış. Belirtilen alanları sanki tek nesneymiş gibi göstererek problemi çözüme kavuşturuyor. Filtreleme, arama gibi ekranlar için neredeyse hiç enerji harcamk zorunda kalınmıyor. ICriteria yapısı güçlü ancak çoğu zaman string tabanlı çalışmak zorunda kalıyoruz.
NhibernateDataSource Eksiklikleri
Her open source projede olduğu gibi wizard yok, GridView direk Datasource’a bağlandığında GridView kolonlarını otomatik oluşturmuyor. GridView’ın “AutoGenerateColoumns” property’sini True yapmamız gerekiyor ya da elle kolon isimlerini vermemiz gerekiyor.
Çözüm
Nikhil Kotari(Writing Asp.Net Server Controls kitabının yazarı), kendi DataSource’umuzu yazmak konusunda MSDN’de yazdığı 5 tane makale izlenerek kendimize özel DataSource yazılabilir. Böylece NhibernateDataSource’un küçük eksiklikleri de kapatılabilir… LINQ NHibernate üzerine uygulanırsa string tabanlı çalışılmak zorunda kalınmaz.Bunun için de Ayende Rahien’in hazırladığı LINQ for NHibernate(açılan sayfada ilk sırada) open source projesi temel alınabilir. Böylece sadece Ar-Ge ekibi Framework’u geliştiriken ICretieria API’sini kullanır, Yazılım Geliştiriceiler ise gerekli olan yerlerde(CRUD fonksiyonları hazır geleceği için tekrar kod yazmak zorunda kalınmayacak) LINQ ile çalışabilecektir.
Sonuç
Bir tür template ile; DB’si hazır olan bir proje XML configurasyonları, BaseDAO sınıfları ve onlardan inherit olan Service’lerin tanımları yapıldığında, yazılımcıya düşen iş ciddi derecede azalacaktır. Basit DB işlemleri birkaç tıklama ile, kompleks DB işlemleri ise çok hızlı ve çok kolay şekilde gerçeklenebilecektir. Belirtilen yöntemler uygulandığında yazılım geliştirme süreci çok hızlı olabilecektir
http://tahircakmak.blogspot.com/2008/05/nhibernatee-baslama-klavuzu_20.html
NoT:
Daha ayrıntılı bilgiler için aşağıdaki linke tıklayıp Manning Nhibernate in Action kitabını okuyabilirsiniz.
Hiç yorum yok:
Yorum Gönder