Kullanım Durumu ve Depo Kalıpları
Kullanım durumlarını Swift protokolleri olarak tanımlayın ve depo arayüzlerini uygulayın.
Kullanım Durumu ve Depo Kalıpları, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. 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.
Kullanım Senaryosu Nedir?
Bir kullanım senaryosu, tek bir iş eylemini kapsüller ve alan varlıklarıyla veri depolarını düzenler.
struct PlaceOrderUseCase {
let cart: CartRepository
let payment: PaymentService
let orders: OrderRepository
func execute(userId: Int) async throws -> Order {
let items = try await cart.items(for: userId)
let receipt = try await payment.charge(items: items)
return try await orders.create(receipt: receipt)
}
}Tek Sorumluluk
Her kullanım senaryosu tam olarak tek bir iş yapar. Birden fazla sorumluluk, birden fazla kullanım senaryosu anlamına gelir.
// One use case per business action:
struct FetchUserUseCase { ... }
struct UpdateUserUseCase { ... }
struct DeleteUserUseCase { ... }Protokol Olarak Kullanım Senaryosu
Kullanım senaryosu için bir protokol tanımlayın; böylece sunum katmanındaki testlerde sahte bir uygulamayla değiştirilebilir.
protocol PlacingOrder {
func execute(userId: Int) async throws -> Order
}
struct PlaceOrderUseCase: PlacingOrder { ... }Veri Deposu Nedir?
Bir veri deposu, veri kaynağını soyutlar. Çağıranlar bir Swift protokolüyle etkileşir; gerçekleme ağ, Core Data veya bellek içi olabilir.
protocol OrderRepository {
func create(receipt: PaymentReceipt) async throws -> Order
func list(userId: Int) async throws -> [Order]
func cancel(orderId: Int) async throws
}Veri Deposu Gerçeklemesi
Somut veri deposu, alan çağrılarını ağ veya veritabanı işlemlerine dönüştürür.
struct RemoteOrderRepository: OrderRepository {
func create(receipt: PaymentReceipt) async throws -> Order {
let dto = receipt.toDTO()
let data = try await api.post("/orders", body: dto)
return try JSONDecoder().decode(OrderDTO.self, from: data).toDomain()
}
func list(userId: Int) async throws -> [Order] { ... }
func cancel(orderId: Int) async throws { ... }
}Testler için Bellek İçi Veri Deposu
Girdi/çıktı işlemleri olmadan hızlı ve belirlenebilir testler yapabilmek için bellek içi bir veri deposu sağlayın.
final class InMemoryOrderRepo: OrderRepository {
var orders: [Order] = []
func create(receipt: PaymentReceipt) async throws -> Order {
let order = Order(id: orders.count + 1, items: receipt.items)
orders.append(order)
return order
}
func list(userId: Int) async throws -> [Order] { orders }
func cancel(orderId: Int) async throws { orders.removeAll { $0.id == orderId } }
}Kullanım Senaryolarını Birleştirme
Kullanım senaryoları, ortak alt işlemler için başka kullanım senaryolarını çağırabilir; böylece her biri kendi amacına odaklanır.
struct CheckoutUseCase {
let validateCart: ValidateCartUseCase
let placeOrder: PlaceOrderUseCase
let notifyUser: NotifyUserUseCase
func execute(userId: Int) async throws -> Order {
try await validateCart.execute(userId: userId)
let order = try await placeOrder.execute(userId: userId)
try await notifyUser.execute(order: order)
return order
}
}Veri Deposu ve Hizmet Karşılaştırması
Veri deposu: Tek bir varlık türü üzerindeki oluşturma, okuma, güncelleme ve silme işlemlerini yürütür. Hizmet: Birden fazla varlığı düzenler veya doğrudan depolama yapmadan harici API'leri çağırır.
// Repository: single entity
protocol UserRepository { func getUser(id: Int) async throws -> User }
// Service: cross-entity operation
protocol AuthService { func login(email: String, password: String) async throws -> Session }Veri Depolarında Önbellekleme
Veri depoları, gerçekleme ayrıntısını kullanım senaryosuna göstermeden sonuçları şeffaf biçimde önbelleğe alabilir.
struct CachedUserRepository: UserRepository {
private var cache: [Int: User] = [:]
private let remote: UserRepository
func getUser(id: Int) async throws -> User {
if let cached = cache[id] { return cached }
let user = try await remote.getUser(id: id)
cache[id] = user
return user
}
func saveUser(_ user: User) async throws { try await remote.saveUser(user) }
}Test Edilebilirlik
Kullanım senaryoları protokol tabanlı veri depolarına bağımlı olduğundan, iş mantığını yalıtılmış biçimde test etmek için sahte uygulamalar ekleyebilirsiniz.
let repo = InMemoryOrderRepo()
let sut = PlaceOrderUseCase(orders: repo, ...)
let order = try await sut.execute(userId: 1)
XCTAssertEqual(repo.orders.count, 1)Hataları Dönüştürme
Veri depoları, döndürmeden önce veri katmanı hatalarını (ağ, veritabanı) alan hatalarına dönüştürmelidir.
func getUser(id: Int) async throws -> User {
do {
let data = try await api.get("/users/\(id)")
return try decode(data)
} catch let e as URLError where e.code == .notConnectedToInternet {
throw DomainError.offline
}
}Kısa Kontrol
Temiz Mimari'de Veri Deposu ile Hizmet arasındaki temel fark nedir?
Ders Özeti
Kullanım senaryoları tek bir iş eylemini kapsüller ve veri deposu protokollerine bağımlıdır. Veri depoları veri kaynaklarını bir protokolün arkasında soyutlar. Hızlı testler için bellek içi veri depoları kullanın. Veri depoları altyapı hatalarını alan hatalarına dönüştürür. Hizmetler birden fazla varlık içeren işlemleri düzenler.
Sıkça Sorulan Sorular
“Kullanım Durumu ve Depo Kalıpları” dersi ücretsiz mi?
Evet — “Kullanım Durumu ve Depo Kalıpları” 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.
“Kullanım Durumu ve Depo Kalıpları” dersinde ne öğreneceğim?
Kullanım durumlarını Swift protokolleri olarak tanımlayın ve depo arayüzlerini uygulayı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 2. dersidir.
“Kullanım Durumu ve Depo Kalıpları” 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