Geçen gül ORM ile alakalı makaleleri incelerken Evcil.net'de varolan Muhammed TAHİROĞLU'nun yazmış olduğu ORM'de Su Bulanık başlıklı bir yazı okudum. ORM ile alakalı bende araştırmalarımı sizinle paylaşayım dedim.
ORM(Object/Relational Mapping) nedir sorusunu şöyle kısa bir tabir ile belirtsek fena olmaz sanırım. ORM kısaca hiç denecek kadar (kadarı yok aslında öyle) SQL kodu yazmadan veritabanı ile iletişim kurabilen bir yapı. Daha doğrusu sizin veritabanı ile nesneleriniz arasındaki ilişkişiyi oluşturan yapı diyebiliriz.
Düşünün ki C# 'da Musteri isminde bir Class oluşturdunuz. Daha sonra bu Class'ın özelliklerini belirlediniz. MusterID, MusteriName vs. gibi. Musteri Class'ının ismini yazıp "."'ya bastığınızda Intellisense size o sınıfın MusteriID, MusteriName gibi alt özelliklerini listeleyecektir. Bunu zaten yapıyoruz.
ORM tarafında DLINQ'den örnek verecek olursak bir DMBL dosyası oluşturup Tabloları içerisine sürüklediğimizde kod tarafında da DataContext'imizin ismini yazıp "."'ya bastığımızda yine Tablolarımızın listelendiğini ve o tablomuzun da içerisindeki alanların listelendiğini görürsünüz. Yapmış olduğumuz işlemi manuel olarak yapmış olsaydık işimiz bayağı bir uzayacaktı ve zamandan kaybetmiş olacaktık.
ORM araçları ise bizlere bu işlemi sağlıyor. Veritabanı model dosyalarımızı oluşturuyoruz ve kod tarafında ise basit bir şekilde kod yazmadan veritabanındaki verilerimize erişim sağlayabiliyoruz.
Kısacası örnekleyecek olursak, Settings tablom var ve ben bu tablonun altında 8 tane alanım var. Ben bu tabloma erişmek için yapacağım işlemleri sıralayayım;
1. Connection nesnesi oluştur.
2. Command nesnesi oluştur.
3. Connection nesnesini aç.
4. Command'a komut ve connection'ı ata.
5. DataReader oluştur.
6. DataReader'a Command'ı çalıştır.
7. While döngüsü oluştur.
vs. vs. vs.
bu böyle uzar gider. Ve eğer ki bir fonksiyon oluşturup bu işlemi yaptırmıyorsanız her çekmek istediğiniz yerde bu yapıyı kullanmak zorunda kalabilirsiniz.
ORM de yaparken ise bir seferliğine data modelinizi oluşturuyorsunuz. Daha sonra ise adımları yazıyorum.
1. DataContext'e eriş.
2. dataContext.Settings liste ata.
3. Kullan istediğin gibi :)
Adımlar gördüğünüz gibi çok kısa. Yaptığınız iş küçük fakat gördüğü iş büyük. Yapı böyle...
".NET" Tarafında bu işe büyük önem veriyorlar olsa gerek ki ORM ile alakalı bayağı bir kütüphane var. Listeye bir göz atalım :)
.NET Persistence
BBADataObjects
DataObjects.NET
Data Tier Modeler for .NET
DotNorm
Eldorado.NET
Enterprise Core Objects (ECO™)
Entity Broker
eXpress Persistent Objects for .NET
FastObjects.NET
JC Persistent Framework
LLBLGen Pro
ModelWorks
Nhibernate
Nolics.NET
Norm
Norpheme
ObjectBroker
ObjectSpaces
ObjectSpark
Objectz.NET
OJB.NET
OPF.Net (Object Persistent Framework)
ORM.NET
Pragmatier Data Tier Builder
RapTier
Sisyphus Persistence Framework
TierDeveloper
Bob.NET
ObjectPersistor.NET
Genome
Görüldüğü gibi liste bayağı kabarık :P
Bu aralar benim sıkça duymuş olduğum Nhibernate var. Yok ben bunları kullanmam diyorsanız zaten C# 3.0 ile DLINQ gelmişti onu kullanarak yolunuza devam edebilirsiniz :) Sonuçta yaptığı iş hemen hemen aynı. Fakat performans konularında hepsi birbiri ile yarış halinde.
Durum göründüğü gibi böyle. Görünmeyen yüzü içinse geniş araştırmalar gerekiyor. Araştırmalarımı sizinle paylaşmaktan çekinmeyeceğim inşallah.
Bazı kaynakları da sizlere vereyim faydalı olur inşallah;
ORM http://en.wikipedia.org/wiki/Object-relational_mapping (İngilizce)
NHibernate ile ORM'e giriş http://www.csharpnedir.com/makalegoster.asp?Mid=732 (Türkçe)
ORM ile Fikir edinmeniz için http://www.fazlamesai.net/?a=article&sid=4994 (Türkçe)
Şimdilik Selametle...