0Pricing
Swift Academy · Ders

Protokol Soyutlamalarıyla Bağımlılığın Tersine Çevrilmesi

Sınırlar olarak Swift protokollerini kullanarak somutlaştırmalara değil soyutlamalara bağımlı olun.

Protokol Soyutlamalarıyla Bağımlılığın Tersine Çevrilmesi, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Bağımlılıkların Tersine Çevrilmesi İlkesi

Üst düzey modüller alt düzey modüllere bağımlı olmamalıdır. Her ikisi de soyutlamalara (protokollere) bağımlı olmalıdır.

// WITHOUT DIP:
class OrderService { let db = SQLiteDatabase() }  // depends on concrete
// WITH DIP:
class OrderService { let db: Database }  // depends on abstraction

Soyutlamayı Tanımlama

Üst düzey modülünüzün ihtiyaç duyduğu sözleşmeyi kapsayan bir protokol çıkarın.

protocol Database {
  func save<T: Encodable>(_ value: T, key: String) throws
  func load<T: Decodable>(key: String) throws -> T
}

Somut Gerçeklemeler

Protokolün arkasında birden fazla somut gerçekleme sağlayın: üretim, test ve gelecekteki alternatifler.

class SQLiteDatabase: Database { ... }
class InMemoryDatabase: Database { ... }
class KeychainDatabase: Database { ... }

Kurucu Enjeksiyonu

Soyutlamayı başlatıcı üzerinden geçirin; bu, en açık ve test edilebilir enjeksiyon biçimidir.

class ProfileService {
  private let db: Database
  init(db: Database) { self.db = db }
}

Neden Her Şey İçin Tekil Örnekler Kullanılmamalı?

Genel tekil örnekler bağımlılıkları gizler; bu da kodun test edilmesini ve anlaşılmasını zorlaştırır.

// Hard to test:
class Service { func run() { MySingleton.shared.doWork() } }
// Easy to test:
class Service { let dep: MyProtocol; func run() { dep.doWork() } }

Swift'te Protokol Soyutlamaları

Swift protokolleri ilişkili türler, varsayılan gerçeklemeler ve bileşim taşıyabilir; bu da onları kapsamlı soyutlamalar için ideal kılar.

protocol Cacheable {
  associatedtype Key: Hashable
  associatedtype Value
  func get(_ key: Key) -> Value?
  func set(_ key: Key, value: Value)
}

Soyutlama Ayrıntı Düzeyi

Arayüz Ayrımı İlkesi: Gerçeklemelerin yalnızca çağıranların ihtiyaç duyduğu şeyleri sağlaması için kapsamlı protokoller yerine dar protokolleri tercih edin.

// Fat (avoid):
protocol DataStore {
  func save(...); func load(...); func delete(...); func query(...); func migrate()
}
// Narrow (prefer):
protocol Readable { func load<T>(...) throws -> T }
protocol Writable { func save<T>(...) throws }

Combine ile DIP

Temel yayıncı türünü gizli tutmak için protokol yöntemlerinden AnyPublisher döndürün.

protocol UserStream {
  func userUpdates() -> AnyPublisher<User, Never>
}

async/await ile DIP

async throws olarak işaretlenen protokol yöntemleri, Swift'in yapılandırılmış eşzamanlılığıyla tamamen uyumludur.

protocol Analytics {
  func track(event: String) async
}
struct FirebaseAnalytics: Analytics {
  func track(event: String) async { /* Firebase call */ }
}

Uygulama Düzeyinde DIP

Somut gerçeklemeleri uygulamanın giriş noktasında (Bileşim Kökü) bağlayın; tüm bağlantıları tek bir yerde tutun.

@main
struct MyApp: App {
  let db: Database = SQLiteDatabase()
  let repo: UserRepository = RemoteUserRepository(db: db)
  let useCase = FetchUserUseCase(repo: repo)
  var body: some Scene {
    WindowGroup { ContentView(useCase: useCase) }
  }
}

DIP ile Test Etme

Testlerde gerçek gerçeklemeleri enjeksiyon noktasında sahte nesnelerle değiştirin.

let mockDB = InMemoryDatabase()
let service = ProfileService(db: mockDB)
// Exercise service
XCTAssertEqual(try mockDB.load(key: "profile"), expectedProfile)

Kısa Kontrol

Bağımlılıkların Tersine Çevrilmesi İlkesi, üst düzey modüller hakkında ne söyler?

Ders Özeti

DIP: Üst düzey modüller protokol soyutlamalarına bağımlıdır; somut türler bu soyutlamaları gerçekler. Dar protokoller çıkarın, kurucular aracılığıyla enjeksiyon yapın ve her şeyi Bileşim Kökü'nde bağlayın. Böylece gerçeklemeleri test, özellik bayrakları ve gelecekteki gereksinimler için değiştirebilirsiniz.

Sıkça Sorulan Sorular

“Protokol Soyutlamalarıyla Bağımlılığın Tersine Çevrilmesi” dersi ücretsiz mi?

Evet — “Protokol Soyutlamalarıyla Bağımlılığın Tersine Çevrilmesi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Protokol Soyutlamalarıyla Bağımlılığın Tersine Çevrilmesi” dersinde ne öğreneceğim?

Sınırlar olarak Swift protokollerini kullanarak somutlaştırmalara değil soyutlamalara bağımlı olun. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Protokol Soyutlamalarıyla Bağımlılığın Tersine Çevrilmesi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Katmanlar: Alan, Veri ve Sunum
  2. Kullanım Durumu ve Depo Kalıpları
  3. Protokol Soyutlamalarıyla Bağımlılığın Tersine Çevrilmesi
  4. DI Çerçevesi Olmadan Katmanları Birleştirme
← Swift Academy Sayfasına Dön