Mimari (IT)Fullstack geliştirici

Repository (Depo) şablonu nasıl gerçekleştirilebilir ve uygulama mimarisi seviyesinde avantajları nelerdir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

  • Veri kaynaklarını değiştirme olanağı sayesinde test etmeyi kolaylaştırır
  • Tek sorumluluk ilkesine uyulmasına yardımcı olur
  • DB geçişini, veri kaynağının değiştirilmesini veya önbellek proxy'lerini basitleştirir

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:

  • İş mantığı ile altyapı katmanlarının net bir şekilde ayrılması
  • Birim testleri için kolayca sahte nesnelerin (mock) eklenebilmesi
  • Sistem büyüdükçe modülerlik ve ölçeklenebilirlik

Hileli sorular.

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.