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 / UIKitAlan 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 SwiftDataAlandaki 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 swappableKlasö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 independentlyYaygı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
- Katmanlar: Alan, Veri ve Sunum
- Kullanım Durumu ve Depo Kalıpları
- Protokol Soyutlamalarıyla Bağımlılığın Tersine Çevrilmesi
- DI Çerçevesi Olmadan Katmanları Birleştirme