Lapisan: Domain, Data dan Persembahan
Pisahkan logik perniagaan daripada capaian data dan UI dalam aplikasi Swift.
Lapisan: Domain, Data dan Persembahan ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 1 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.
Seni Bina Bersih dalam Swift
Seni Bina Bersih memisahkan kod kepada lapisan: Domain (logik perniagaan), Data (penyimpanan berterusan/rangkaian), dan Persembahan (antara muka pengguna).
// Domain: pure Swift, no framework imports
// Data: Core Data / URLSession / JSON
// Presentation: SwiftUI / UIKitLapisan Domain
Lapisan Domain mengandungi entiti perniagaan, kes penggunaan dan protokol repositori. Lapisan ini tidak mempunyai kebergantungan pada UIKit, SwiftUI atau pangkalan data.
// Domain/Entities/User.swift
struct User {
let id: Int
var name: String
var email: String
}
// No import UIKit, no import SwiftDataKes Penggunaan dalam Domain
Kes penggunaan merangkum satu operasi perniagaan yang khusus. Kes ini hanya bergantung pada protokol repositori daripada domain.
// Domain/UseCases/FetchUserUseCase.swift
struct FetchUserUseCase {
let repo: UserRepository
func execute(id: Int) async throws -> User {
try await repo.getUser(id: id)
}
}Protokol Repositori dalam Domain
Protokol repositori mentakrifkan kontrak capaian data. Domain memiliki protokol tersebut; lapisan data menyediakan implementasinya.
// Domain/Repositories/UserRepository.swift
protocol UserRepository {
func getUser(id: Int) async throws -> User
func saveUser(_ user: User) async throws
}Lapisan Data
Lapisan Data melaksanakan protokol domain menggunakan teknologi konkrit seperti URLSession, Core Data, SwiftData dan Keychain.
// 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 */ }
}Objek Pemindahan Data
DTO ialah jenis Codable yang digunakan dalam lapisan data untuk menyahkod respons API, kemudian dipetakan kepada entiti domain.
struct UserDTO: Decodable {
var user_id: Int
var full_name: String
func toDomain() -> User { User(id: user_id, name: full_name, email: "") }
}Lapisan Persembahan
Lapisan Persembahan mengandungi ViewModels dan paparan SwiftUI. Lapisan ini memanggil kes penggunaan dan mendedahkan keadaan yang boleh diperhatikan.
// 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)
}
}Arah Kebergantungan
Kebergantungan menghala ke dalam: Persembahan bergantung pada Domain; Data bergantung pada Domain. Domain tidak bergantung pada apa-apa.
// Outer → Inner dependency rule:
Presentation → Domain ← Data
// Domain is the stable core; outer layers are swappableStruktur Folder
Susun fail Swift mengikut lapisan, kemudian mengikut ciri untuk aplikasi yang besar.
// MyApp/
// ├── Domain/
// │ ├── Entities/
// │ ├── UseCases/
// │ └── Repositories/ (protocols)
// ├── Data/
// │ └── Repositories/ (implementations)
// └── Presentation/
// ├── Views/
// └── ViewModels/Manfaat
Seni bina berlapis membolehkan pengujian secara bebas, implementasi yang boleh ditukar ganti dan pembangunan pasukan secara selari.
// Test Domain in isolation: no network, no DB
// Swap RemoteUserRepo with LocalUserRepo for offline mode
// Teams own layers independentlyKesilapan Lazim
Elakkan mengimport UIKit/SwiftUI dalam lapisan Domain dan elakkan logik perniagaan meresap ke dalam paparan.
// 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 }Semakan Pantas
Lapisan manakah yang memiliki protokol repositori dalam Seni Bina Bersih?
Ringkasan Pelajaran
Lapisan Seni Bina Bersih: Domain (entiti, kes penggunaan, kontrak protokol), Data (implementasi rangkaian/pangkalan data), Persembahan (antara muka pengguna + ViewModels). Kebergantungan menghala ke dalam, menuju Domain. Domain tidak mempunyai sebarang kebergantungan rangka kerja, menjadikannya boleh diuji sepenuhnya melalui ujian unit.
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 “Lapisan: Domain, Data dan Persembahan” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Lapisan: Domain, Data dan Persembahan”, 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 “Lapisan: Domain, Data dan Persembahan”?
Pisahkan logik perniagaan daripada capaian data dan UI dalam aplikasi Swift. 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 1 daripada 4.
Berapa lamakah pelajaran “Lapisan: Domain, Data dan Persembahan” 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