Repository Pattern: Veri Erişim Katmanını Standartlaştırma

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

Repository Pattern: Veri Erişimini Soyutlama ve Standartlaştırma​


Repository Pattern, veritabanı ile iş mantığı (Business Logic) arasında bir arabulucu görevi görür. Temel amacı, veri kaynağına erişim kodlarını tek bir yerden yönetmek ve bu kodları uygulamanın diğer katmanlarından gizlemektir.



1. Neden Repository Pattern Kullanmalıyız?​



  • []Kod Tekrarını Önler: Aynı sorguyu (örneğin "Aktif Üyeleri Getir") projenin beş farklı yerinde yazmak yerine, Repository içinde bir kez yazıp her yerden çağırırsınız.
    []Test Edilebilirlik:** Gerçek veritabanı yerine "Sahte (Mock) Repository" kullanarak iş mantığınızı kolayca test edebilirsiniz.
    []Teknoloji Bağımsızlığı:** Yarın bir gün Entity Framework'ten Dapper'a geçmek isterseniz, sadece Repository katmanını değiştirmeniz yeterli olur; Controller kodlarınıza dokunmazsınız.
    []Merkezi Yönetim:** Veri filtreleme, sıralama veya cache (önbellek) gibi işlemleri tek bir noktada halledebilirsiniz.




2. Generic Repository: Her Tablo İçin Tek Bir Yapı​


Her tablo için (Urun, Kategori, Musteri) ayrı ayrı "Ekle, Sil, Güncelle" metotları yazmak yerine, genel bir Generic Repository oluştururuz.

C#:
public interface IRepository<T> where T : class
{
Task<IEnumerable<T>> GetAllAsync();
Task<T> GetByIdAsync(int id);
Task AddAsync(T entity);
void Update(T entity);
void Delete(T entity);
}



3. Uygulama: EF Core ile Repository​


Şimdi bu arayüzü (interface) somut bir sınıfla hayata geçirelim:

C#:
public class Repository<T> : IRepository<T> where T : class
{
protected readonly DbContext _context;
private readonly DbSet<T> _dbSet;

public Repository(DbContext context)
{
    _context = context;
    _dbSet = _context.Set<T>();
}

public async Task<T> GetByIdAsync(int id) => await _dbSet.FindAsync(id);

public async Task AddAsync(T entity) => await _dbSet.AddAsync(entity);

// Diğer metotlar...

}



4. Repository vs Unit of Work​


Repository deseni genellikle Unit of Work (İş Birimi) deseni ile beraber kullanılır. Repository "ne yapılacağını" (Ekle, Sil), Unit of Work ise "ne zaman kaydedileceğini" (SaveChanges) belirler. Bu sayede birden fazla tablodaki işlem tek bir transaction (işlem) içinde güvenle tamamlanır.

ÖzellikRepository KullanmadanRepository Kullanarak
BağımlılıkController veritabanına sıkı bağlıdır.Controller sadece arayüze (Interface) bağlıdır.
Kod TekrarıSorgular her yere dağılmıştır.Sorgular tek bir sınıftadır.
BakımZor ve risklidir.Kolay ve güvenlidir.



Sonuç​


Repository Pattern, "Enterprise" (Kurumsal) seviyedeki uygulamaların temel taşıdır. Kodunuzu daha temiz, daha sürdürülebilir ve daha profesyonel kılar. Eğer küçük bir proje yapmıyorsanız, veri erişim katmanınızı mutlaka bu desenle organize etmelisiniz.
 
Geri
Üst