Considérations sur la Migration

August 26, 2025 · View on GitHub

Lorsque vous mettez à jour votre modèle de données, en particulier pour les données persistantes ou synchronisées, vous devez gérer la compatibilité ascendante pour éviter les problèmes potentiels lors du chargement de données anciennes. Voici quelques points importants à garder à l'esprit :

1. Ajout de Champs non Optionnels

Si vous ajoutez de nouveaux champs non optionnels à votre modèle, le décodage des anciennes données (qui ne contiendront pas ces champs) peut échouer. Pour éviter cela :

  • Envisagez de donner des valeurs par défaut aux nouveaux champs.
  • Rendez les nouveaux champs optionnels pour garantir la compatibilité avec les anciennes versions de votre application.

Exemple :

struct Settings: Codable {
    var text: String
    var isDarkMode: Bool
    var newField: String? // Le nouveau champ est optionnel
}

2. Changements de Format de Données

Si vous modifiez la structure d'un modèle (par exemple, en changeant un type de Int à String), le processus de décodage peut échouer lors de la lecture des anciennes données. Planifiez une migration en douceur en :

  • Créant une logique de migration pour convertir les anciens formats de données vers la nouvelle structure.
  • Utilisant l'initialiseur personnalisé de Decodable pour gérer les anciennes données et les mapper sur votre nouveau modèle.

Exemple :

struct Settings: Codable {
    var text: String
    var isDarkMode: Bool
    var version: Int

    // Logique de décodage personnalisée pour les anciennes versions
    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        self.text = try container.decode(String.self, forKey: .text)
        self.isDarkMode = try container.decode(Bool.self, forKey: .isDarkMode)
        self.version = (try? container.decode(Int.self, forKey: .version)) ?? 1 // Valeur par défaut pour les anciennes données
    }
}

3. Gestion des Champs Supprimés ou Obsolètes

Si vous supprimez un champ du modèle, assurez-vous que les anciennes versions de l'application peuvent toujours décoder les nouvelles données sans planter. Vous pouvez :

  • Ignorer les champs supplémentaires lors du décodage.
  • Utiliser des décodeurs personnalisés pour gérer les anciennes données et gérer correctement les champs obsolètes.

4. Versionnement de Vos Modèles

Le versionnement de vos modèles vous permet de gérer les changements dans votre structure de données au fil du temps. En conservant un numéro de version dans votre modèle, vous pouvez facilement mettre en œuvre une logique de migration pour convertir les anciens formats de données en nouveaux. Cette approche garantit que votre application peut gérer les anciennes structures de données tout en passant en douceur aux nouvelles versions.

  • Pourquoi le Versionnement est Important : Lorsque les utilisateurs mettent à jour leur application, ils peuvent encore avoir des données plus anciennes persistantes sur leurs appareils. Le versionnement aide votre application à reconnaître le format des données et à appliquer la logique de migration correcte.
  • Comment l'Utiliser : Ajoutez un champ version à votre modèle et vérifiez-le pendant le processus de décodage pour déterminer si une migration est nécessaire.

Exemple :

struct Settings: Codable {
    var version: Int
    var text: String
    var isDarkMode: Bool

    // Gérer la logique de décodage spécifique à la version
    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        self.version = try container.decode(Int.self, forKey: .version)
        self.text = try container.decode(String.self, forKey: .text)
        self.isDarkMode = try container.decode(Bool.self, forKey: .isDarkMode)

        // Si vous migrez depuis une ancienne version, appliquez les transformations nécessaires ici
        if version < 2 {
            // Migrer les anciennes données vers le nouveau format
        }
    }
}
  • Meilleure Pratique : Commencez avec un champ version dès le début. Chaque fois que vous mettez à jour la structure de votre modèle, incrémentez la version et gérez la logique de migration nécessaire.

5. Test de la Migration

Testez toujours votre migration de manière approfondie en simulant le chargement d'anciennes données avec de nouvelles versions de votre modèle pour vous assurer que votre application se comporte comme prévu.


Cette traduction a été générée automatiquement et peut contenir des erreurs. Si vous êtes un locuteur natif, nous vous serions reconnaissants de contribuer avec des corrections via une Pull Request.