0Pricing
Swift Academy · Leçon

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

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

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

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

Erreurs 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

  1. Couches : domaine, données et présentation
  2. Modèles de cas d’utilisation et de référentiel
  3. Inversion des dépendances avec des abstractions de protocoles
  4. Relier les couches sans framework DI
← Retour à Swift Academy