1 Mayıs 2015 Cuma

Convention Sınıflarının Yeniden Yazılması


Herkese merhabalar.

 Bugün sizlere, önceki yazılarda bahsetmiş olduğum convention sınıflarını nasıl kendimize göre değiştirebileceğimizden bahsedeceğim. Öncelikle convention sınıflarının ne olduğunu bir hatırlayalım. Convention sınıfları, tablo ve kolon isimlendirmelerini yaparken bize yardımcı olan default sınıflardır. İsimlendirme sınıflarından bazılarını hatırlayalım. Önceki haftalarda detaylı bir şekilde anlattığım için sadece bazı isimlerini hatırlatacağım [1].

  • ColumnNullabilityConvention
  • PrimaryKeyNameConvention
  • StringColumnLengthConvention
  • IClassConvention
  • IIdConvention
  • IHasManyConvention
  • IReferenceConvention 

 
      İsimlendirme sınıflarını neden değiştirelim ki dediğinizi duyar gibiyim. Örneğin; StringColumnLengthConvention'ın default sınıfında, string tipindeki kolonun uzunluk sınırı belirtilmediyse bu sınıf sayesinde otomatik olarak uzunluk 100 olarak atanır [1]. Eğer bu uzunluğun 100 değil de 50 olmasını istiyorsanız, default olan isimlendirme sınıfını kendinize göre uyarlayıp bu yapıyı kullanabilmeniz gerekiyor.

    İsimlendirme sınıfları(conventions), birçok interface ve ana sınıflar kullanılarak oluşmuş olan sınıflardır [2]. Bu sınıfların her birinde Apply metodu tanımlanmıştır. Bu metot, isimlendirme sınıfının çeşidine göre parametreler almaktadır [3]. Bu metot, eşleştirmelerinize yapmış olduğunuz değişimin yapıldığı yerdir [2]. Eşleştirme sınıfınızın yapısını oluşturduktan sonra default olan isimlendirme sınıfları uygulanır. Aşağıdaki örnek ile isimlendirme sınıflarının mantığını daha iyi anlayacaksınız.

 public class KisiMap : ClassMap<Kisi>  
 {  
  public KisiMap()  
  {  
   Id(x => x.Id);  
   Map(x => x.Ad)  
    .Column("TumAd")  
    .Length(100);  
   Map(x => x.Yas);  
  }  
 }  

Yukarıda belirlemiş olduğumuz mapping sınıfımıza göre, isimlendirmemizin akış şeklini açıklayacağım; kullanmış olduğunuz high-level metodlara bakarak, convention sınıfı mapping sınıfınızın Kisi sınıfı olduğunu, Ad ve Yas olarak iki özelliğinizin olduğuna karar verir. Daha sonra, convention sınıfları, kolon isimleri, uzunluğu gibi değerlere uygulanır [2]. Convention(isimlendirme) sınıflarımızın çalışma yapısını anladıktan sonra, gelin kendi örneğimize bir bakalım.

 public class LowercaseTableNameConvention : IClassConvention  
 {  
  public void Apply(IClassInstance instance)  
  {  
   // değiştirme yapılacak yer..  
  }  
 }  

Yukarıdaki kod ile tablo ismimizi belirleyebilmemiz mümkün; ancak Apply metodunun içerisine tablo isimlerimizin ne yapıda olacağını yazmalıyız.

 public void Apply(IClassInstance instance)  
 {  
  instance.Table("tbl_" + instance.EntityType.Ad);  
 }  

Yukarıda gördüğünüz üzere, IClassInstance interface'i sayesinde Table metodunu kullanarak convention sınıfımızın tablo ismini kendimize göre yazmak bu kadar kolay [2]. Dilediğiniz convention sınıfını Apply metodu sayesinde yukarıdaki şekilde kendinize göre uyarlayabilirsiniz.

Bu haftalık anlatacaklarım bu kadar. Bir sonraki yazıda buluşmak üzere, hoşçakalın..


Kaynaklar


[1] Fluent NHibernate conventions-examples, http://marcinobel.com/index.php/fluent-nhibernate-conventions-examples/, Nisan 27, 2015.

[2] Conventions, https://github.com/jagregory/fluent-nhibernate/wiki/Conventions, Nisan 27, 2015.

[3] Changing The FluentNHibernate Id Conventions, http://candland.net/2009/09/14/changing-the-fluentnhibernate-id-conventions/, Nisan 27, 2015.




Hiç yorum yok:

Yorum Gönder