İçeriğe geç →

Abstract Factory, Factory Method VS Reflection

Abstract Factory Method ve Factory Design bu kalıpların her ikisinde de temel sorunlar var. if, else veya switch karar yapılarını kullanmamız gerekir ya da Dictionary veri yapısı ile de kullanabilirsiniz. Ben Dictionary veri yapısını kullanacağım, aşağıdaki kodu inceleyebilisiniz.

Yukarıdaki kodda, if/ else ve switch deyimini değiştirmek için Dictionary veri yapısını kullandım. Dictionary de bahsedilen tüm sınıflar temel sınıf ModelBase’den miras alıyor. GetTable ( string key ) yöntemi, gelen “key” parametresine göre gerekli nesneyi döndürüyor. Ancak yine de dictionary soyutladığımızda, belirli bir zamanda, türetilmiş sınıfların tüm nesneleri somutlaşacaktır. GetTable yöntemi, “key” parametresini temel alarak bir nesne döndürür.

Reflection kullanmak maliyetli ama if,else ve switch gibi karar yapılarını kullanırsa daha fazla kod yazmamız gerekir. Reflection ile yazdığım kod aşağıdadır.

Reflection ile sadece 2 satır kod ile factory design veya abstract factory method desenlerinin tüm işlemleri yapabiliyoruz. GetTable methoduna gelen “key” parametresine göre sınıfın nesnesini oluşturup döndürüyoruz. Reflection kullandığımız zaman biraz performans kaybı yaşıyoruz ama günümüzdeki güçlü bilgisayarlar bu açığı kapatıyorlar ve bu performans kaybı çokta önemli değil.

Factory design veya abstract factory method hala tasarım kalıplarıdır, ancak Reflectionın gücüyle If / else, switch veya Dictionary kullanmadan kod satırlarını en aza indirdik.

Kategori: C# Design Pattern

Yorumlar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir