Couches : domaine, données et présentation
Séparer la logique métier de l’accès aux données et de l’interface dans une application Swift.
Couches : domaine, données et présentation est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.
Architecture propre en Swift
L’architecture propre sépare le code en couches : domaine (logique métier), données (persistance/réseau) et présentation (interface utilisateur).
// Domain: pure Swift, no framework imports
// Data: Core Data / URLSession / JSON
// Presentation: SwiftUI / UIKitLa couche domaine
La couche domaine contient les entités métier, les cas d’utilisation et les protocoles de dépôt. Elle ne dépend ni de UIKit, ni de SwiftUI, ni des bases de données.
// Domain/Entities/User.swift
struct User {
let id: Int
var name: String
var email: String
}
// No import UIKit, no import SwiftDataLes cas d’utilisation dans le domaine
Un cas d’utilisation encapsule une opération métier précise. Il dépend uniquement des protocoles de dépôt du domaine.
// Domain/UseCases/FetchUserUseCase.swift
struct FetchUserUseCase {
let repo: UserRepository
func execute(id: Int) async throws -> User {
try await repo.getUser(id: id)
}
}Les protocoles de dépôt dans le domaine
Les protocoles de dépôt définissent le contrat d’accès aux données. Le domaine possède le protocole ; la couche de données en fournit l’implémentation.
// Domain/Repositories/UserRepository.swift
protocol UserRepository {
func getUser(id: Int) async throws -> User
func saveUser(_ user: User) async throws
}La couche de données
La couche de données implémente les protocoles du domaine à l’aide de technologies concrètes (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 */ }
}Les objets de transfert de données
Les DTO sont des types Codable utilisés dans la couche de données pour décoder les réponses de l’API, puis les convertir en entités du domaine.
struct UserDTO: Decodable {
var user_id: Int
var full_name: String
func toDomain() -> User { User(id: user_id, name: full_name, email: "") }
}La couche de présentation
La couche de présentation contient les ViewModels et les vues SwiftUI. Elle appelle les cas d’utilisation et expose un état observable.
// 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)
}
}Direction des dépendances
Les dépendances pointent vers l’intérieur : la présentation dépend du domaine ; les données dépendent du domaine. Le domaine ne dépend de rien.
// Outer → Inner dependency rule:
Presentation → Domain ← Data
// Domain is the stable core; outer layers are swappableStructure des dossiers
Pour les grandes applications, organisez les fichiers Swift d’abord par couche, puis par fonctionnalité.
// MyApp/
// ├── Domain/
// │ ├── Entities/
// │ ├── UseCases/
// │ └── Repositories/ (protocols)
// ├── Data/
// │ └── Repositories/ (implementations)
// └── Presentation/
// ├── Views/
// └── ViewModels/Avantages
L’architecture en couches permet des tests indépendants, des implémentations interchangeables et un développement parallèle par les équipes.
// Test Domain in isolation: no network, no DB
// Swap RemoteUserRepo with LocalUserRepo for offline mode
// Teams own layers independentlyErreurs courantes
Évitez d’importer UIKit ou SwiftUI dans la couche domaine et évitez que la logique métier ne se retrouve dans les vues.
// 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 }Vérification rapide
Quelle couche possède les protocoles de dépôt dans l’architecture propre ?
Récapitulatif de la leçon
Couches de l’architecture propre : domaine (entités, cas d’utilisation, contrats de protocole), données (implémentations réseau/base de données), présentation (interface utilisateur et ViewModels). Les dépendances pointent vers l’intérieur, en direction du domaine. Le domaine ne dépend d’aucun framework, ce qui le rend entièrement testable par des tests unitaires.
Questions Fréquemment Posées
La leçon « Couches : domaine, données et présentation » est-elle gratuite ?
Oui — le texte complet de « Couches : domaine, données et présentation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Couches : domaine, données et présentation » ?
Séparer la logique métier de l’accès aux données et de l’interface dans une application Swift. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Swift Academy ?
Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Couches : domaine, données et présentation » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?
Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Couches : domaine, données et présentation
- Modèles de cas d’utilisation et de référentiel
- Inversion des dépendances avec des abstractions de protocoles
- Relier les couches sans framework DI