Repository
- Dart kursu
- Uzman
- Ders 33/47
- 5 dk
Repository pattern öğrenirsin.
Repository
Repository pattern, veri erişimini soyutlar. Alan katmanı bir Repository arayüzü tanımlar; veri katmanı bunu uygular. Alan, verinin API'den mi veritabanından mı geldiğini bilmez.
Örnek: abstract class ProductRepository { Product fetch(String id); }. Somut sınıflar: ApiProductRepository, DbProductRepository, MockProductRepository — hepsi aynı arayüzü uygular.
Avantaj: testte MockProductRepository kullanılır; gerçek API'ye bağlanmadan alan mantığı sınanır. Veri kaynağı değişince sadece somut sınıf değişir.
Çoklu veri kaynakları
Aynı arayüzü birden çok sınıf uygulayabilir: ApiRepo (uzak API), DbRepo (yerel veritabanı), CacheRepo (önbellek). Uygulama, hangisini kullanacağına yapılandırma ile karar verir.
Önbellek stratejisi: CacheRepo önce önbelleğe bakar; miss olursa ApiRepo'ya düşer ve sonuçu önbelleğe yazar. Bu desen dekoratör (decorator) olarak bilinir.
Repository arayüzü değişmeden, iç uygulama istenildiği gibi değiştirilebilir. Bu, kodun bakımını ve genişletilmesini kolaylaştırır.
Uygulama ProductRepository ve Mock tanımla
Bir Product sınıfı tanımla: final String id; final String name; Product(this.id, this.name);. Bir abstract class ProductRepository tanımla: Product fetch(String id);. Bir class MockProductRepository implements ProductRepository tanımla: @override Product fetch(String id) => Product(id, 'Kitap');. main içinde final repo = MockProductRepository(); yarat; final product = repo.fetch('1'); ve print(product.name); ekle.
Başlangıç kodu
void main() {
// Product sınıfını tanımla (id, name alanları)
// abstract ProductRepository tanımla (fetch metodu)
// MockProductRepository tanımla (arayüzü uygular)
// bir mock repo yarat; fetch çağır; name yazdır
}Örnek çözüm
class Product {
final String id;
final String name;
Product(this.id, this.name);
}
abstract class ProductRepository {
Product fetch(String id);
}
class MockProductRepository implements ProductRepository {
@override
Product fetch(String id) => Product(id, 'Kitap');
}
void main() {
final repo = MockProductRepository();
final product = repo.fetch('1');
print(product.name);
}Beklenen çıktı
Kitap
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Repository parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
Repository |
Sözleşme |
RepositoryImpl |
Uygulama |
fetch(id) |
Okuma metodu |
save(entity) |
Yazma metodu |
2 Repository pattern neyi soyutlar?
- Arayüz çizimini
- Veri erişimini Doğru cevap
- Test çalıştırmayı
- Dosya okumayı
Açıklama: Repository veri erişimini soyutlar; kaynak gizli kalır.
3 Repository uygulaması
class ApiUserRepository ____ UserRepository { }
class ApiUserRepository implements UserRepository { }
Açıklama: implements ile arayüz uygulanır.