Swift Academy · Pelajaran

Lapisan: Domain, Data dan Persembahan

Pisahkan logik perniagaan daripada capaian data dan UI dalam aplikasi Swift.

Pelajaran 1 daripada 413 langkah

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 / UIKit

Lapisan 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 SwiftData

Kes 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 swappable

Struktur 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 independently

Kesilapan 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.

Percuma untuk bermula

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

  1. Lapisan: Domain, Data dan Persembahan
  2. Corak Kes Penggunaan dan Repositori
  3. Penyongsangan Kebergantungan dengan Abstraksi Protokol
  4. Menyambungkan Lapisan tanpa Rangka Kerja DI
← Kembali ke Swift Academy