Repository deseni, veri kaynaklarına (DB, API vb.) erişim mantığını kapsüller, alan mantığı ile veri depolama mekanizması arasında bir soyutlama katmanı sağlar. Temel amaç, depolamanın uygulanabilirlik detaylarını gizlemek ve belirli bir alan nesnelerinin koleksiyonu ile çalışmayı sağlamaktır.
Avantajlar:
C# için kod örneği:
public interface IUserRepository { User GetById(int id); void Add(User user); } public class UserRepository : IUserRepository { private readonly DbContext _context; public UserRepository(DbContext context) { _context = context; } public User GetById(int id) => _context.Users.Find(id); public void Add(User user) => _context.Users.Add(user); }
Anahtar özellikler:
Repository, veritabanı yapısını bilmek zorunda mı?
Hayır. Repository, alan nesneleri ile işlemeli ve depolamanın detaylarını gizlemelidir. Ayrı bir Veri Erişim Katmanı, DB şemasına eşleştirme yapar.
Repository sınıfı içinde iş mantığını karıştırmak mümkün mü?
Hayır. Bu, Endişelerin Ayrılması ilkesini ihlal eder: Repository yalnızca veri alma/saklama ile ilgilenir. İş mantığı hizmetlere/alan nesnelerine taşınmalıdır.
Repository ve DAO aynı şey mi?
Tam olarak değil. DAO, Repository desenine ortogonal olup, tablo ve kayıt düzeyinde çalışır, oysa Repository iş mantığı nesneleri ile ilgilenir. Repository, iş varlıklarının koleksiyonlarını soyutlayarak, DAO altyapıya daha yakındır.