0Pricing
Swift Academy · Ders

Katmanlar: Alan, Veri ve Sunum

Bir Swift uygulamasında iş mantığını veri erişiminden ve kullanıcı arayüzünden ayırın.

Katmanlar: Alan, Veri ve Sunum, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 1. 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.

Swift'te Temiz Mimari

Temiz Mimari, kodu katmanlara ayırır: Alan (iş mantığı), Veri (kalıcılık/ağ) ve Sunum (kullanıcı arayüzü).

// Domain: pure Swift, no framework imports
// Data: Core Data / URLSession / JSON
// Presentation: SwiftUI / UIKit

Alan Katmanı

Alan katmanı iş varlıklarını, kullanım senaryolarını ve veri deposu protokollerini içerir. UIKit, SwiftUI veya veritabanlarına bağımlılığı yoktur.

// Domain/Entities/User.swift
struct User {
  let id: Int
  var name: String
  var email: String
}
// No import UIKit, no import SwiftData

Alandaki Kullanım Senaryoları

Bir kullanım senaryosu, belirli bir iş işlemini kapsüller. Yalnızca alandaki veri deposu protokollerine bağımlıdır.

// Domain/UseCases/FetchUserUseCase.swift
struct FetchUserUseCase {
  let repo: UserRepository
  func execute(id: Int) async throws -> User {
    try await repo.getUser(id: id)
  }
}

Alandaki Veri Deposu Protokolleri

Veri deposu protokolleri, verilere erişim sözleşmesini tanımlar. Protokol alan katmanına aittir; veri katmanı gerçeklemeyi sağlar.

// Domain/Repositories/UserRepository.swift
protocol UserRepository {
  func getUser(id: Int) async throws -> User
  func saveUser(_ user: User) async throws
}

Veri Katmanı

Veri katmanı, alan protokollerini somut teknolojileri (URLSession, Core Data, SwiftData, Keychain) kullanarak gerçekler.

// Data/Repositories/RemoteUserRepository.swift
struct RemoteUserRepository: UserRepository {
  func getUser(id: Int) async throws -> User {
    let data = try await URLSession.shared.data(from: userURL(id)).0
    return try JSONDecoder().decode(User.self, from: data)
  }
  func saveUser(_ user: User) async throws { /* PUT request */ }
}

Veri Aktarım Nesneleri

Veri aktarım nesneleri, API yanıtlarını çözümlemek ve ardından alan varlıklarına dönüştürmek için veri katmanında kullanılan Codable türleridir.

struct UserDTO: Decodable {
  var user_id: Int
  var full_name: String
  func toDomain() -> User { User(id: user_id, name: full_name, email: "") }
}

Sunum Katmanı

Sunum katmanı ViewModels ve SwiftUI görünümlerini içerir. Kullanım senaryolarını çağırır ve gözlemlenebilir durumu dışa sunar.

// Presentation/ViewModels/ProfileViewModel.swift
@MainActor
final class ProfileViewModel: ObservableObject {
  @Published var user: User?
  private let useCase: FetchUserUseCase
  init(useCase: FetchUserUseCase) { self.useCase = useCase }
  func load(id: Int) async {
    user = try? await useCase.execute(id: id)
  }
}

Bağımlılıkların Yönü

Bağımlılıklar içe doğru yönelir: Sunum, Alan'a; Veri, Alan'a bağımlıdır. Alan hiçbir şeye bağımlı değildir.

// Outer → Inner dependency rule:
Presentation → Domain ← Data
// Domain is the stable core; outer layers are swappable

Klasör Yapısı

Büyük uygulamalarda Swift dosyalarını önce katmana, ardından özelliğe göre düzenleyin.

// MyApp/
// ├── Domain/
// │   ├── Entities/
// │   ├── UseCases/
// │   └── Repositories/  (protocols)
// ├── Data/
// │   └── Repositories/  (implementations)
// └── Presentation/
//     ├── Views/
//     └── ViewModels/

Avantajlar

Katmanlı mimari bağımsız testleri, değiştirilebilir gerçeklemeleri ve ekiplerin paralel geliştirme yapmasını sağlar.

// Test Domain in isolation: no network, no DB
// Swap RemoteUserRepo with LocalUserRepo for offline mode
// Teams own layers independently

Yaygın Hatalar

Alan katmanına UIKit/SwiftUI aktarmaktan ve iş mantığının görünümlere sızmasına izin vermekten kaçının.

// WRONG: Domain entity with SwiftUI Color
struct Product {
  var color: Color  // UIKit/SwiftUI import in Domain!
}
// CORRECT: Use a plain string or enum
struct Product { var colorHex: String }

Kısa Kontrol

Temiz Mimari'de veri deposu protokollerinin sahibi hangi katmandır?

Ders Özeti

Temiz Mimari katmanları: Alan (varlıklar, kullanım senaryoları, protokol sözleşmeleri), Veri (ağ/veritabanı gerçeklemeleri), Sunum (kullanıcı arayüzü + ViewModels). Bağımlılıklar Alan'a doğru içe yönelir. Alanın hiçbir çerçeve bağımlılığı olmadığından tamamen birim testi yapılabilir.

Sıkça Sorulan Sorular

“Katmanlar: Alan, Veri ve Sunum” dersi ücretsiz mi?

Evet — “Katmanlar: Alan, Veri ve Sunum” 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.

“Katmanlar: Alan, Veri ve Sunum” dersinde ne öğreneceğim?

Bir Swift uygulamasında iş mantığını veri erişiminden ve kullanıcı arayüzünden ayırın. 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 1. dersidir.

“Katmanlar: Alan, Veri ve Sunum” 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