Repository Design Pattern Kullanımı

Bu makalemizde sizlerle birlikte Repository Design Pattern konusunu işleyeceğiz.Profesyonel iş dünyasında çoğu uygulamanın bizlerden belirli mimari kurallara uyarak farklı katmanlara ayrılarak geliştirilmesi beklenir.Buna N-Tier Architecture denir. N-Tier Architecture Presentation Tier, Middle Tier yada Data Tier gibi çeşitli katmanlardan oluşabilir.Presentation katmanında uygulamamızın UI tarafını ilgilendiren arayüzler bulunur,Middle katmanında Business Logic tarafını ilgilendiren geliştirmeler yapılır aynı zamanda Database ile etkileşim bu katmanda sağlanır.Data Tier katmanı ise uygulamada yer alan MsSql Server,Oracle vs gibi database Context’lerini barındıran katmandır.Bu katman tüm uygulamalar içerisinde en önemli katman olarak kabul görür.Bunun sebebi ise Database içerisinde barındırdığımız dataların bizim için en önemli şey olmasıdır.Database’ler ile olan veri alış verişi işin en güvenlikli ve generic olması gereken yerlerin en başında gelir.

Bilindiği üzere Database varsa CRUD işlemi (Crete,Read,Update,Delete) uygulamamızda olmazsa olmazı olur.Data katmanı ile doğrudan Business Logic’in bulunduğu Middle Tier haberleşsin istenilmez ve bu durum uygulamızın büyüklüğüne göre çeşitli bir çok sorun çıkartabilir.Repository Design Pattern bu ihtiyacımızı karşılayan bir tasarım kalıbı olarak kullanılıyor.Kısaca anlatmak gerekirse bu tasarım kalıbı bizim için Data Accsess katmanı ile Business Logic katmanı arasındaki etkileşimi sağlıyor, arabuluculuk görevini üstleniyor.

 Repository Design Pattern

  1. Sonradan bakım kolaylığını üst düzey arttırır. (Maintainability)
  2. Unit-Test yapabilme kolaylığı.
  3. Esnek bir mimari yapı uygulamamızı sağlar.
  4. Yeni eklenecek modüller veya istenilen değişiklikler kolay bir şekilde uygulamamıza entegre edilmesine yardımcı olur.
  5. Domain Driven Development’ın önünü açar.

 

Şimdi bir proje üzerinde Repository Design Pattern nasıl uygulanır onu anlamaya çalışalım.Projenizi geliştirirken EntityFramework’ün kurulu olması gerekmektedir.

 
      Senaryomuz, EmreShnDatabaseContext adında bir DBContext nesnemizin olduğunu varsayarak ilerlemek.

  1. Adım : IBaseDal adında CRUD işlemlerimizi gerçekleştirmeye olanak sağlayacak Generic bir Interface tanımlıyoruz.
public interface IBaseDal<T> where T : class, ITable, new()
    {
        void Add(T obj);
        void Update(T obj);
        void Delete(T obj);
        T GetItem(int id);
        List<T> GetList();
    }

 

  1. Adım : Şimdi yukarıda oluşturmuş olduğumuz interfaceden implement olan,kalıtım alan BaseRepository sınıfımızı oluşturuyoruz.
public class BaseRepository<T> : IBaseDal<T>
    where T : class, ITable, new()
    {
        public void Add(T obj)
        {
            using var context = new EmreShnContext();
            context.Set<T>().Add(obj);
            context.SaveChanges();
        }
        public void Update(T obj)
        {
            using var context = new EmreShnContext();
            context.Set<T>().Update(obj);
            context.SaveChanges();
        }
        public void Delete(T obj)
        {
            using var context = new EmreShnContext();
            context.Set<T>().Remove(obj);
            context.SaveChanges();
        }
        public T GetItem(int id)
        {
            using var context = new EmreShnContext();
            return context.Set<T>().Find(id);
        }
        public List<T> GetList()
        {
            using var context = new EmreShnContext();
            return context.Set<T>().ToList();
        }
    }

 

  1. Adım : Şimdi bir Entity tanımlamız gerekiyor.Database tablolarının yerine kullanılan sınıflarımız.Sınıfımızın adı Personel olsun.

public class Personel
{
 public string Adi { get; set; }
 public string Soyadi { get; set; }
}

 

  1. Adım : Bu adımda BaseRepository den inherit olan Personel Entitysi için yeni bir PersonelRepository adında bir class oluşturuyoruz.

public class PersonelRepository : BaseRepository<Personel>

{

 

}


  1. Adım : Yazmış olduğumuz bu Repository kalıbının UI tarafında kullanımı aşağıdaki gibidir.Görüldüğü üzere Personel tablosunda bulunan tüm datalar GetList() methodu kullanılarak getirilmiştir.

void Main(string[ ] args)

   {

                   var personelRepository = new PersonelReposiyory()

                   List<Personel> data = personelRepository.GetList();

   }

 

Repository Design Pattern bu şekilde kullanılmaktadır.Günümüz yazılım dünyası içerisinde en çok kullanılan Design Pattern olarak bilinmektedir.

Bir sonraki makelede görüşmek üzere...

İlginizi Çekebilir

Yorum Yap