Clean architecture
- React Native kursu
- Uzman
- Ders 15/47
- 5 dk
Clean architecture prensiplerini öğrenirsin.
Clean architecture
Clean architecture, bağımlılıkların dıştan içe akmasını öneren bir yaklaşımdır. Merkezde domain (varlıklar ve use case'ler), dışta framework'ler ve UI yer alır. Dış halka içe bağımlı olur; tersi olmaz.
Bu sayede domain logic'i React Native ya da veritabanından bağımsızdır. Framework değişse de domain aynı kalır; testleri yazmak kolaydır. Bağımlılık tersine çevrilir (dependency inversion).
Dependency inversion
Clean architecture'nin temel ilkesi bağımlılığın tersine çevrilmesidir. Dış katman, iç katmana bağımlı olur; iç katman dış katmanı tanımaz. Bu, interface'ler aracılığıyla sağlanır.
Örnek: bir UserRepository interface'i domain'de tanımlanır; gerçek implementasyon (API çağrısı) dış katmanda yazılır. Domain somut sınıfı bilmez; yalnızca interface'i çağırır.
Uygulama UserRepository interface'i
Bir UserRepository interface'i tanımla. getUser(id: string): Promise<User> metodu olsun. User tipini de basit bir interface olarak tanımla.
Başlangıç kodu
// User ve UserRepository tiplerini buraya tanımla
export { User, UserRepository };Örnek çözüm
// User ve UserRepository tiplerini buraya tanımla
interface User {
id: string;
name: string;
}
interface UserRepository {
getUser(id: string): Promise<User>;
}
export { User, UserRepository };Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Clean halkaları eşleştir
| Kavram | Anlamı |
|---|---|
Entities |
Domain varlıkları |
Use cases |
İş mantığı |
Controllers |
UI bağlayıcı |
Frameworks |
React Native, veritabanı |
2 Clean architecture'de domain neyi bilir?
- Yalnızca kendi varlık ve use case'lerini
- React Native bileşenlerini
- Veritabanı şemasını Doğru cevap
- HTTP isteklerini
Açıklama: Domain yalnızca kendi içindeki varlıkları bilir.
3 Repository interface adı
interface ____ {
getUser(id: string): Promise<User>;
}
interface UserRepository {
getUser(id: string): Promise<User>;
}
Açıklama: UserRepository domain'de tanımlanır.