Cache Kullaniminda State Bag Access Pattern

Yazdigimiz web uygulamalarinda hepimiz Cache yapisini en az bir kere kullanmisizdir. Cache kolleksiyonuna daha onceden yazdigimiz nesneleri okumak icin kullanilan bir tasarim deseni olan State Bag Access Patterni farkinda olmadan hepimiz kullanmistir.

   1:  public List List()
   2:      {
   3:          List myList; 
   4:          if (Cache["customers"] == null) 
   5:          { 
   6:              myList = DAL.ListCustomers(); 
   7:              Cache.Insert("customers", mList, null, DateTime.Now.AddHours(1), TimeSpan.Zero); 
   8:          } 
   9:          return (List)Cache["customers"];
  10:      }

 

Fakat bu tasarim deseninde dikkat etmemiz gereken ince bir puf nokta var. Cache kolleksiyonunda tuttugumuz nesneye bir istek geldiginde, onu sadece bir defa okumaliyiz. Aksi takdirde cache kolleksiyonunda bulunan bir nesne yukaridaki kodda da gozuktugu gibi; 4. satirda dolu iken 9. satira gectigi an null hale gelmis olabilir. Buda bizim ?Object reference not set to an instance of an object? hatasi ile karsi karsiya gelmemize sebep olur. Bu durumdan korunmak icin yazmamiz gereken kod ise asagida gosterilmistir.

   1:  public List List() 
   2:      { 
   3:          string cacheKey = "customers"; 
   4:          List myList = Cache[cacheKey] as List; 
   5:          if (myList == null) 
   6:          { 
   7:              myList = DAL.ListCustomers(); 
   8:              Cache.Insert(cacheKey, mList, null, SiteConfig.CacheDuration, TimeSpan.Zero); 
   9:          } 
  10:          return myList; 
  11:      }