Date Image Saturday, December 26, 2009 | Kategoriler | Entity Framework, Tümü

Entity Framework Singleton Design Pattern

   Entity Framework ile geliştirdiğimiz projelerde, entity modelinin fazlaca intance ını aldığımızı farkettim. Bunun üzerine OOP yapısını öğrenmeye başladığım zamanlarda öğrendiğim ilk tasarımlardan biri olan singleton design pattern ile bu soruna çare bulabileceğimi ümit ediyordum ve ilk denemede olumlu sonuç aldım.

   Neden bu şekilde kullanalım ki sorusu aklına gelenler için şunu söyleyebilirim; entity nesnesinin her bir instance ının yani örneğinin oluşturulmasıyla bellekte bir yer kaplayacaktır. Büyük projelerde, haliyle büyük veritabanları ve dolayısıyla büyük bir entity nesnesi oluşacaktır.Bu problemin önüne entity nesnelerini bölerek, farklı modülleri farklı entity nesleri oluşturarak da çözebiliriz. Bu nesnenin her defasında yeniden oluşturulması ile yaşanacak performans kaybının boyutunu kestiremeyebilirsiniz. Ancak projenizin performansından hoşnut değilseniz bu tasarım şablonunu uygulayarak farkı gözlemlemenizde fayda olacaktır.

  Örnek olarak, bir console application ve bir de class library oluşturduktan sonra entity nesnesini de dal adını verdiğim class library projesi içerinde oluşturdum. Daha sonra DataModel adında bir class ekleyerek singleton modelini burada uyguladım. Örneğe bir bakalım.

namespace dal

{

    public class DataModel

    {

        private DataModel() { }

 

        private static NorthwindEntities model;

 

        public static NorthwindEntities CreateSingleton()

        {

            if (model == null)

                model = new NorthwindEntities();

            return model;

        }

    }

}

   DataModel class ı , public bir classtır ve dikkat ederseniz constractor( yapıcı metot) ı private tır. Constractor ın private olmasının nedeni class ın new ile instance ının alınmasını engellemektir. Bu class ın abstract ya da static  yazılmasıyla da sağlanabilir. Bunlardan sonra entity modelimizi private ve static olarak tanımladık. Static bir metot tanımladık ve bu metot entity nesnesini geri döndürecek.

   Son olarak singleton modelin kullanımına bakalım. Console uygulamasına dal projesini ve System.Data.Entity yi referans olarak ekleyelim ve Program.cs yi şöyle oluşturalım.  

 

 

static void Main(string[] args)

{

GetProducts();

}

 

static void GetProducts()

{

     NorthwindEntities model = DataModel.CreateSingleton();

 

      var products = model.Products;

      foreach (var p in products)

      {

Console.WriteLine(p.ProductName);

}

}

   Evet görüldüğü üzere DataModel sınıfının kullanımı da yazılması kadar kolay :)

   İlerleyen zamanlarda yine benzer konularla bilgi paylaşımı yapmak dileğiyle kolay gelsin..

Benzer Yazılar

Entity Framework'e Giriş - Insert/Update/Delete İşlemleri

Entity Framework'te Lazy Loading Tasarım Kalıbının Önemi

 

 

Etiketler : Design Patterns , .Net