Lagen: domein, data en presentatie
Bedrijfslogica scheiden van gegevenstoegang en UI in een Swift-app.
Lagen: domein, data en presentatie is een gratis Swift Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.
Schone architectuur in Swift
Schone architectuur verdeelt code in lagen: Domein (bedrijfslogica), Data (persistentie en netwerk) en Presentatie (UI).
// Domain: pure Swift, no framework imports
// Data: Core Data / URLSession / JSON
// Presentation: SwiftUI / UIKitDe domeinlaag
De domeinlaag bevat bedrijfsentiteiten, gebruiksscenario's en repositoryprotocollen. Deze laag heeft geen afhankelijkheden van UIKit, SwiftUI of databases.
// Domain/Entities/User.swift
struct User {
let id: Int
var name: String
var email: String
}
// No import UIKit, no import SwiftDataGebruiksscenario's in het domein
Een gebruiksscenario kapselt één specifieke bedrijfsbewerking in. Het is alleen afhankelijk van repositoryprotocollen uit het domein.
// Domain/UseCases/FetchUserUseCase.swift
struct FetchUserUseCase {
let repo: UserRepository
func execute(id: Int) async throws -> User {
try await repo.getUser(id: id)
}
}Repositoryprotocollen in het domein
Repositoryprotocollen definiëren het contract voor gegevenstoegang. Het domein beheert het protocol; de datalaag levert de implementatie.
// Domain/Repositories/UserRepository.swift
protocol UserRepository {
func getUser(id: Int) async throws -> User
func saveUser(_ user: User) async throws
}De datalaag
De datalaag implementeert domeinprotocollen met concrete technologieën (URLSession, Core Data, SwiftData, 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 */ }
}Objecten voor gegevensoverdracht
DTO's zijn Codable-typen die in de datalaag worden gebruikt om API-antwoorden te decoderen en vervolgens aan domeinentiteiten worden gekoppeld.
struct UserDTO: Decodable {
var user_id: Int
var full_name: String
func toDomain() -> User { User(id: user_id, name: full_name, email: "") }
}De presentatielaag
De presentatielaag bevat ViewModels en SwiftUI-weergaven. Deze laag roept gebruiksscenario's aan en stelt waarneembare toestand beschikbaar.
// 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)
}
}Richting van afhankelijkheden
Afhankelijkheden wijzen naar binnen: de presentatielaag is afhankelijk van het domein; de datalaag is afhankelijk van het domein. Het domein is nergens van afhankelijk.
// Outer → Inner dependency rule:
Presentation → Domain ← Data
// Domain is the stable core; outer layers are swappableMappenstructuur
Organiseer Swift-bestanden in grote apps eerst per laag en daarna per functie.
// MyApp/
// ├── Domain/
// │ ├── Entities/
// │ ├── UseCases/
// │ └── Repositories/ (protocols)
// ├── Data/
// │ └── Repositories/ (implementations)
// └── Presentation/
// ├── Views/
// └── ViewModels/Voordelen
Een gelaagde architectuur maakt onafhankelijk testen, verwisselbare implementaties en parallelle ontwikkeling door teams mogelijk.
// Test Domain in isolation: no network, no DB
// Swap RemoteUserRepo with LocalUserRepo for offline mode
// Teams own layers independentlyVeelgemaakte fouten
Vermijd imports van UIKit en SwiftUI in de domeinlaag en voorkom dat bedrijfslogica in weergaven terechtkomt.
// 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 }Korte controle
Welke laag beheert de repositoryprotocollen in een schone architectuur?
Lesoverzicht
Lagen van een schone architectuur: Domein (entiteiten, gebruiksscenario's, protocolcontracten), Data (netwerk- en database-implementaties), Presentatie (UI en ViewModels). Afhankelijkheden wijzen naar binnen, richting het domein. Het domein heeft geen afhankelijkheden van frameworks, waardoor je het volledig met eenheidstesten kunt testen.
Leer Swift met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 122
- Lessen
- 409
Veelgestelde vragen
Is de les “Lagen: domein, data en presentatie” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “Lagen: domein, data en presentatie”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.
Wat leer ik in “Lagen: domein, data en presentatie”?
Bedrijfslogica scheiden van gegevenstoegang en UI in een Swift-app. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Swift Academy te beginnen?
Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Lagen: domein, data en presentatie”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Swift Academy?
Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Lagen: domein, data en presentatie
- Use-case- en repositorypatronen
- Dependency inversion met protocolabstracties
- Lagen koppelen zonder een DI-framework