Tek Fotoluk İpucu 132 - Bir Tipin Özelliklerine Varsayılan Değerlerini Set Etmek

Merhaba Arkadaşlar,

Nesneler kodlarımızın olmazsa olmaz enstrümanları. Özellikle Domain odaklı çözümlerimizde POCO(Plain Old CLR Objects) tiplerini sıklıkla kullanıyoruz. Bu tipler(genellikle class olarak tasarlanıyorlar) içlerinde sayısız özellik(Property) de barındırabiliyorlar. Nesneler örneklendiklerinde ve sonrasındaki yaşam süreleri boyunca çeşitli değerler ile nitelendiriliyorlar. Peki t anında bir nesne örneğinin tüm özelliklerine varsayılan değerlerini atamanız gerekseydi ne yapardınız? Peki ya bunu herhangibir T tipi için uygulanabilir hale getirmek isteseniz ne yapardınız? Yoksa aşağıdaki gibi generic bir genişletme metodu(Generic Extension Method) ile mi çözüm arardınız?

Örnekte yapılan şey aslında çok basit. SetToDefault<T> metodu T tipinden herhangi bir nesne üzerinden çağırılabilen bir fonksiyon. Bu metod içerisinde T tipinin tüm özellikleri dolaşılıyor ve türüne göre varsayılan değer atamaları gerçekleştiriliyor. Özellikle referans(Reference) ve değer(Value) türü ayrımına göre bir işlem uygulanmakta. Eğer özellik tipi String ise boş bir değer atıyoruz(String.Empty). Değer türü ise özellik tipinden bir örnek oluşturulup atanıyor(Activator.CreateInstance ile) Hiç biri değilse bir referans türü olarak null değer ataması yapılıyor. (Burada Domain' e göre bazı kuralları işin içerisine katıp farklı varsayılan değerlerin verilmesi de söz konusu olabilir. Bunu bir düşünün) Bir başka ipucunda görüşmek dileğiyle hepinize mutlu günler dilerim.

Yorumlar (5) -

  • (Burada Domain' e göre bazı kuralları işin içerisine katıp farklı varsayılan değerlerin verilmesi de söz konusu olabilir. Bunu bir düşünün)
  • (Burada Domain' e göre bazı kuralları işin içerisine katıp farklı varsayılan değerlerin verilmesi de söz konusu olabilir. Bunu bir düşünün)
  • Selam hocam,
    Bu durumda ValueType olan instance icin default constructure'i oldugunu var sayiyoruz, eger parametresiz constructure yoksa Unity gibi containerlar uzerinden resolve ettirebilir miyiz?
  • Üstat bu da olmaz mı?

    return defautl(typeof(T));
  • Olur tabii en basit yöntem. Ama buradaki amaç varsayılan değerleri set ederken araya girip kontrolü ele almak. O yüzden  (Burada Domain' e göre bazı kuralları işin içerisine katıp farklı varsayılan değerlerin verilmesi de söz konusu olabilir. Bunu bir düşünün) şeklinde bir not da düşmüştüm ;)

Yorum ekle

Loading