Corak Kes Penggunaan dan Repositori
Takrifkan kes penggunaan sebagai protokol Swift dan laksanakan antara muka repositori.
Corak Kes Penggunaan dan Repositori ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Apakah Kes Penggunaan?
Kes penggunaan (pengantara) merangkum satu tindakan perniagaan, dengan menyelaraskan entiti domain dan repositori.
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)
}
}Tanggungjawab Tunggal
Setiap kes penggunaan melakukan tepat satu perkara. Pelbagai tanggungjawab bermaksud pelbagai kes penggunaan.
// One use case per business action:
struct FetchUserUseCase { ... }
struct UpdateUserUseCase { ... }
struct DeleteUserUseCase { ... }Kes Penggunaan sebagai Protokol
Tentukan protokol untuk kes penggunaan supaya kes tersebut boleh digantikan dengan objek olok-olok dalam ujian lapisan persembahan.
protocol PlacingOrder {
func execute(userId: Int) async throws -> Order
}
struct PlaceOrderUseCase: PlacingOrder { ... }Apakah Repositori?
Repositori mengabstrakkan sumber data. Pemanggil berinteraksi dengan protokol Swift; implementasinya mungkin menggunakan rangkaian, Core Data atau memori.
protocol OrderRepository {
func create(receipt: PaymentReceipt) async throws -> Order
func list(userId: Int) async throws -> [Order]
func cancel(orderId: Int) async throws
}Implementasi Repositori
Repositori konkrit menterjemahkan panggilan domain kepada operasi rangkaian atau pangkalan data.
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 { ... }
}Repositori Dalam Memori untuk Ujian
Sediakan repositori dalam memori untuk ujian yang pantas dan deterministik tanpa input/output.
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 } }
}Menggabungkan Kes Penggunaan
Kes penggunaan boleh memanggil kes penggunaan lain untuk suboperasi yang dikongsi, sambil mengekalkan fokus setiap kes.
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
}
}Repositori berbanding Perkhidmatan
Repositori: operasi CRUD terhadap satu jenis entiti. Perkhidmatan: menyelaraskan berbilang entiti atau memanggil API luaran tanpa penyimpanan langsung.
// 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 }Penyimpanan Sementara dalam Repositori
Repositori boleh menyimpan hasil secara telus tanpa kes penggunaan mengetahui perincian implementasinya.
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) }
}Kebolehujian
Oleh sebab kes penggunaan bergantung pada repositori berprotokol, anda boleh menyuntik pengganti untuk menguji logik perniagaan secara berasingan.
let repo = InMemoryOrderRepo()
let sut = PlaceOrderUseCase(orders: repo, ...)
let order = try await sut.execute(userId: 1)
XCTAssertEqual(repo.orders.count, 1)Penterjemahan Ralat
Repositori hendaklah menterjemahkan ralat lapisan data (rangkaian, pangkalan data) kepada ralat domain sebelum mengembalikannya.
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
}
}Semakan Pantas
Apakah perbezaan utama antara Repositori dengan Perkhidmatan dalam Seni Bina Bersih?
Ringkasan Pelajaran
Kes penggunaan merangkum tindakan perniagaan tunggal dan bergantung pada protokol repositori. Repositori mengabstrakkan sumber data di sebalik protokol. Gunakan repositori dalam memori untuk ujian yang pantas. Repositori menterjemahkan ralat infrastruktur kepada ralat domain. Perkhidmatan menyelaraskan operasi yang melibatkan berbilang entiti.
Pelajari Swift dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Soalan Lazim
Adakah pelajaran “Corak Kes Penggunaan dan Repositori” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Corak Kes Penggunaan dan Repositori”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Corak Kes Penggunaan dan Repositori”?
Takrifkan kes penggunaan sebagai protokol Swift dan laksanakan antara muka repositori. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Corak Kes Penggunaan dan Repositori” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Lapisan: Domain, Data dan Persembahan
- Corak Kes Penggunaan dan Repositori
- Penyongsangan Kebergantungan dengan Abstraksi Protokol
- Menyambungkan Lapisan tanpa Rangka Kerja DI