CodeBlanks Logo Icon CodeBlanks

Clean architecture

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

App.js
// User ve UserRepository tiplerini buraya tanımla

export { User, UserRepository };

Örnek çözüm

App.js
// 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ı

Soru
interface ____ {
  getUser(id: string): Promise<User>;
}
Cevap
interface UserRepository {
  getUser(id: string): Promise<User>;
}

Açıklama: UserRepository domain'de tanımlanır.

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