| « Sandcastle Çıktı | SysInternals satın alındı » |
O/R Mapper Nedir ?
O/R Mapper'lar basit olarak tanımladığınız class'lar için kalıcı kayıt ortamlarıdır.
En basit kullanım olarak aşağıdaki gibi bir class'ınız olduğunu varsayın.
class Musteri
{
public Guid No;
public string Ad;
public string Soyad;
}
Uygulama olarak bu ornegin bir yeni musteri tanimi yapan, listeleyen ve guncelleyen bir veri tabanı katmanı yazmanız gereklidir. Bu tür classları kullanan her işlem için en azından Select, Update, Delete, Insert sql komutlarını kullanan en az 4 fonksiyon yazmanız gereklidir.
Eger bu şekilde kullanacağınız tek bir class'ınız varsa hiç bunları öğrenip başınızı ağrıtmayın ama bu class'ların adedi fazlacaysa (-ki bu alışıldık olandır) bu fonksiyonları yazmak işkence olacaktır. Üstüne class'lar üzerinde değişiklik yaptığınızda mesela yeni bir alan eklediğinizde geri dönüp bu fonksiyonları tekrar düzeltmeniz gerekecek.
O/R Mapperlar tam bu devrede işinizi görmeye başlar. Kullanacağınız mapper'a göre değişiklik göstersede mantık class'larınızın üzerine 1-2 attribute tanımlanmasıyla bu sql işlemleri otomatik hale gelebilir.
Mesela;
[Table("Musteriler")]
class Musteri
{
[Column("No"),SqlTypes.UniqueIdentifier]
public Guid No;
[Column("Ad"),SqlTypes.Varchar]
public string Ad;
[Column("Soyad"),SqlTypes.Varchar]
public string Soyad;
}
Şeklinde hangi class'ın hangi tabloda duracağı class üzerindeki field'ların hangi sütuna yazılacağını belirleyebilirsiniz. Bu attribute'lar tamamen örnek olması için verildi, kullanacağınız O/R mapper'ın dokümanlarında bunun nasıl yapılacağı yazar zaten.
Daha sonra yapılacak tek işlem
SaveObject(object entity);
object GetObject(object identifier);
benzeri iki tane fonksiyonla objeleri yönetmektir.
O/R mapper'ların temel olarak yaptığı iş budur. Internette ücretli ve open source lisanslı tonla O/R mapper bulabilirsiniz. En son araştırdığımda NHibernate bunların içinde en kullanılabilir olanıydı.
Dikkat etmeniz gereken nokta ise işe başlamadan önce kullanacağınız mapper'ın avantaj/dezavantajlarını, limitlerine çok dikkat edin. Proje belirli bir aşamaya geldikten sonra mapper değiştirmeniz çok ağrılı olabilir.
Bu o/r mapper'ların bir çoğu database bağımsız (mssql, oracle, mysql) gibi ortamlarda çalışır ve sizi database katmanından tamamen uzaklaştırır. Size sadece objeler üzerindeki tasarımı düşünmek kaldığından işinizi çok daha kısa sürede yapmanıza imkan vereceğinden emin olabilirsiniz.
İllaki yazdığım herşey bana ait olsun gibi fikirleriniz varsa (-ki bu doğaldır) kendi o/r mapperınızı .net'deki generics+attribute ile kısa sürede yazabilirsiniz, ancak istediğiniz her işi görebilecek bir şey yapmanız uzun vaktinizi alabilir. dikkatli olun.
Daha fazla bilgi için aşağıdaki link'ler işinizi görebilir;
O/R Mappers portal
http://about.ormappers.com/
O/R Mapperlarda olması gereken 10 özellik
http://dotnetjunkies.com/Tutorial/CC0DBD32-33E0-4CD5-9C12-DE37E5984B5B.dcik
.NET için mapper karşılaştırmaları
http://c2.com/cgi/wiki?ObjectRelationalToolComparisonDotNet
Farklı dillerde O/R Mapper uygulamaları
http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software
Hangisi ?
http://www.howtoselectguides.com/dotnet/ormapping/