CodeBlanks Logo Icon CodeBlanks

Özet - Mimari

clean, repository ve DI'yi birleştirerek bir mimari iskelet yazarsın.

Özet - Mimari

Bu grupta Dart mimarisini öğrendik: clean architecture (katman ayrımı), feature-based (özellik bazlı düzen), repository (veri erişim soyutu), dependency injection (bağımlılık enjeksiyonu), SOLID (tasarım ilkeleri).

Temel: bağımlılıklar içe akar; alan katmanı hiçbir şeye bağımlı değildir. Repository veri kaynağını gizler; DI arayüze bağımlılığı sağlar. SOLID, değiştirilebilir ve test edilebilir kodun temelidir.

Bu desenler birlikte çalışır: clean architecture çerçeveyi, feature-based organizasyonu, repository veri katmanını, DI bağımlılık yönetimini, SOLID ise sınıf tasarımını belirler.

Uygulama Özet: entity + repository + container

Bir Order sınıfı tanımla: final String id; final int total; Order(this.id, this.total);. Bir abstract class OrderRepository tanımla: Order find(String id);. Bir class MockOrderRepo implements OrderRepository tanımla: @override Order find(String id) => Order(id, 250);. Bir class Container tanımla: final Map<String, dynamic> _items = {}; void register(String key, dynamic item) => _items[key] = item; T resolve<T>(String key) => _items[key] as T;. main içinde final c = Container(); yarat; c.register('repo', MockOrderRepo()); çağır; final repo = c.resolve<OrderRepository>('repo');; final order = repo.find('ord-1'); ve print('${order.id}: ${order.total}'); ekle.

Başlangıç kodu

main.dart
void main() {
  // Order entity, abstract OrderRepository ve MockOrderRepo tanımla
  // Container sınıfını tanımla (register, resolve metotları)
  // bir container yarat; repo kaydet; resolve et; order yazdır
}

Örnek çözüm

main.dart
class Order {
  final String id;
  final int total;
  Order(this.id, this.total);
}

abstract class OrderRepository {
  Order find(String id);
}

class MockOrderRepo implements OrderRepository {
  @override
  Order find(String id) => Order(id, 250);
}

class Container {
  final Map<String, dynamic> _items = {};
  void register(String key, dynamic item) => _items[key] = item;
  T resolve<T>(String key) => _items[key] as T;
}

void main() {
  final c = Container();
  c.register('repo', MockOrderRepo());
  final repo = c.resolve<OrderRepository>('repo');
  final order = repo.find('ord-1');
  print('${order.id}: ${order.total}');
}

Beklenen çıktı

ord-1: 250

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Repository + DI birlikte ne sağlar?

  • Test edilebilir, değiştirilebilir tasarım Doğru cevap
  • Daha az kod satırı
  • Daha hızlı arayüz
  • Otomatik kod üretimi

Açıklama: Repository soyutlar, DI enjekte eder; birlikte test edilebilirlik sağlar.

2 Mimari kavramları eşleştir

Kavram Anlamı
Entity Alan modeli
Repository Sözleşme
Container DI kapsayıcı
Feature Modül

3 Repository arayüzü

Soru
____ class OrderRepository { }
Cevap
abstract class OrderRepository { }

Açıklama: abstract class ile sözleşme tanımlanır.

Uzman bölümündeki tüm dersler