Clean architecture
- Dart kursu
- Uzman
- Ders 31/47
- 5 dk
Clean architecture prensiplerini öğrenirsin.
Clean architecture
Clean architecture, kodu katmanlara ayırır: sunum (presentation), alan (domain) ve veri (data). Bağımlılıklar daima içe — alan katmanına — doğru akar.
Alan katmanı (Entity, Repository arayüzü) hiçbir şeye bağımlı değildir. Veri katmanı (DataSource) alan arayüzünü uygular. Sunum katmanı alanı çağırır, veriyi doğrudan kullanmaz.
Bu ayrım, veri kaynağını (API, veritabanı, önbellek) değiştirmeyi kolaylaştırır. Testte sahte (mock) bir repository verilir; alan mantığı değişmez.
Katman ayrımı
Üç temel katman: Entity (alan modeli, iş mantığı), Repository (veri erişim sözleşmesi), DataSource (somut veri kaynağı).
Sunum katmanı bir UseCase çağırır; UseCase repository'yi kullanır; repository bir DataSource'tan veri okur. Her katman yalnızca bir alt katmanla konuşur.
Bu zincir, tek bir değişikliğin tüm sistemi etkilemesini önler. Örneğin API'den veritabanına geçiş sadece DataSource değişikliği yapar; alan ve sunum dokunulmaz.
Uygulama Entity ve Repository tanımla
Bir UserEntity sınıfı tanımla: final String id; final String name; UserEntity(this.id, this.name);. Bir abstract class UserRepository tanımla: UserEntity fetch(String id); metodu. main içinde final user = UserEntity('1', 'Ayşe'); yarat ve print(user.name); ekle.
Başlangıç kodu
void main() {
// UserEntity sınıfını tanımla (id, name alanları)
// abstract UserRepository tanımla (fetch metodu)
// bir UserEntity yarat; name yazdır
}Örnek çözüm
class UserEntity {
final String id;
final String name;
UserEntity(this.id, this.name);
}
abstract class UserRepository {
UserEntity fetch(String id);
}
void main() {
final user = UserEntity('1', 'Ayşe');
print(user.name);
}Beklenen çıktı
Ayşe
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Clean architecture'de bağımlılık hangi yöne akar?
- Dışa doğru
- Aşağı doğru
- Yukarı doğru
- İçe doğru (alan katmanına) Doğru cevap
Açıklama: bağımlılıklar daima içe, alan katmanına doğru akar.
2 Repository arayüzü
____ class UserRepository {
UserEntity fetch(String id);
}
abstract class UserRepository {
UserEntity fetch(String id);
}
Açıklama: abstract class ile bir sözleşme tanımlanır.
3 Katmanları eşleştir
| Kavram | Anlamı |
|---|---|
Entity |
Alan modeli |
Repository |
Veri erişim sözleşmesi |
DataSource |
Veri kaynağı |
UseCase |
İş kuralı |