Repository Pattern Nedir? Neden Kullanmalıyız?

Eyyoo eyyoo herkese selamlar…

Yazılım merakını dindiremeyip, ileri düzey konularını araştıran her insan mutlaka Design Pattern kavramıyla karşı karşıya gelirler. Yazılım hayatında birden fazla design olsa da asıl önemli olan hangi Design Pattern’i hangi zamanda ve onu nasıl kullanacağımızdır. Repository Pattern, Builder Design Pattern, Adapter Pattern, Command Design Pattern gibi birçok dizaynları görüp karşı karşıya geleceksiniz. Peki bunlardan Repository Pattern nedir? neden ve nasıl kullanmalıyız gelin hep birlikte incelemiş olalım…

Konuyu anlatmadan önce unutmayalım ki.. Nesne yönelimli programalanın (OOP) amaçlarından biri; benzer kodları tekrar tekrar yazmak yerine bir yere yazıp onu kullanmaktır.  Yani benzer kodları tekrar yazmaktan bizi kurtararak hem projemizin kodunun anlaşılır olmasını hemde zamandan tasarruf etmemize neden olur.

# Peki Repository Pattern nedir ve neden kullanırız?

“Veri merkezli uygulamalarda veriye erişimin ve yönetimin tek noktaya indirilmesini sağlayan yapıya Repository Pattern denir.”
*Yani OOP mantığında da söylediğimiz gibi kod tekrarı olmadan, saf ve temiz bir şekilde veritabanı işlemlerinin tek bir noktadan kontrol edip, yönetilmesini Repository Pattern ile sağlıyoruz.

# Peki Repository Pattern faydaları nelerdir?

  • Projede değişiklikler yapıldığında kolayca yönlendirilebilir olması,
  • Esnek bir mimari yapıda olması,
  • Unit-Test yapabilmemizi kolaylaştırması,
  • Veri işlemlerinde ki hataları görmemizi kolaylaştırır.

Şimdi yapacağımız örnekle birlikte kafamızda oluşan yapıyı sağlam bir şekilde oturmasını sağlıyalım.. 🙂

Örneğimiz şu şekilde;
Xamarin ile yapılan bir mobil restaurant uygulaması düşünelim… Uygulamamız veri(stok,masa,fiş,adisyon vb.) bilgilerini dışardan API yardımıyla SQL’den alıyor ve ekrana basıyor.
Eğer Repository Pattern bilmeseydik; Arka planda her SQL CRUD işlemleri için ayrı ayrı classlar ve ayrı ayrı metodlar yazıcaktık. Buda bize çok fazla efor ve zaman kaybı yaratacaktı. Fakat Repository Pattern ile birden fazla veri işlemlerini tek bi çatı altından yapacağız.

Şimdi projeye Repository klasörünü açıp içine BaseRepository adı altında bir class açıp interfacemizide tanımlayıp kodlarımızı yazmaya başlıyoruz.

IBaseRepository interface’de kullanacağımız metodların imzalarını oluşturup bırakıyoruz…

Interface’lerimizi tanımladıktan sonra ana classımıza implement edip içlerine sunucumuzdan çekilecek verilerin HttpWebRequest ‘lerimizi oluşturuyoruz.
Ben anlamanız için sadece ReadAll ve ReadById metodlarını göstereceğim create,update,delete işlemini sizlere bırakıyorum:)

Repository metodlarını tamamladığımıza göre artık kategori,stok,ürün,adisyon vb. veri işlemlerinde tek bir noktadan istek gönderip, gelecek cevabı beklemek kalıyor..

Örnek; Kategoriler tablosunu istiyorum;

Gördüğünüz gibi result değişkenimin içine baktığım da 6tane verimin geldiğini görüyorum. API’den diğer verileri çekmek için .ReadAll(“Kategoriler”); ‘de parantez içinde ki valueyi değiştirmemiz yeterli. Nasıl mı ? buyrun örnekler;

Stoklar tablosunu istiyorum -> string query = await baseRepo.ReadAll(“Stoklar“);
Adisyon tablosunu istiyorum -> string query = await baseRepo.ReadAll(“Adisyon“);
Masalar tablosunu istiyorum -> string query = await baseRepo.ReadAll(“Masalar“); gibi gibi..

# Peki ben Masalar tablosundan hepsini değilde sadece ID numarası 35 olan masayı istiyorum nasıl getirebilirim?

Bu sefer .ReadAll yerine .ReadById kullanacağız.. buyrun;

Diğer delete/update/create işlemlerinide sizlere bırakıyorum. Zaten mantığı anladıysanız gerisi çok sabit 🙂

Bir yazımızın daha sonuna geldik..
Umarım projelerinizde sık sık Repository Design kullanır ve sevdiklerinize kullanımını tavsiye edersiniz. Unutmayın ki çalışacağınız firmalarda, büyük projelerde Repository Design çok fazla karşınıza gelecektir. Ben örneğimde sadece veri işlemleri için kullandım. Repoyu çok farklı yerlerde, işlerinizi hafifletmeniz için kullanabilirsiniz.

Herkese bol mantıklı kodlamalar 🙂

Bu makale hakkında yorum yapmak ister misiniz?