Özet - Mimari
- Dart kursu
- Uzman
- Ders 36/47
- 5 dk
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
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
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ü
____ class OrderRepository { }
abstract class OrderRepository { }
Açıklama: abstract class ile sözleşme tanımlanır.