Introduction
Documentation technique EasySave v1.0 — ProSoft
Contexte du Projet
Mission ProSoft
Notre équipe a intégré l'éditeur de logiciels ProSoft, une entreprise spécialisée dans le développement de solutions professionnelles. Sous la responsabilité du DSI, nous avons été mandatés pour concevoir et développer EasySave, un logiciel de sauvegarde destiné à s'intégrer dans la Suite ProSoft.
Politique Tarifaire
Prix unitaire : 200 €HT
Maintenance annuelle (5/7, 8h-17h) : 12% du prix d'achat
Projet Fil Rouge
Développement en 3 versions majeures avec livrables progressifs et documentations associées (UML, manuel utilisateur, release notes)
Stack Technique
C# / .NET 10.0
Visual Studio 2022, GitHub, PlantUML
Internationalisation
Code et commentaires en anglais pour les filiales anglophones. Interface utilisateur FR/EN.
Contraintes Imposées par la Direction
| Catégorie | Exigence |
|---|---|
| Versioning | Gestion de projet via GitHub avec historique complet des modifications et travail en équipe |
| Qualité du code | Absence de redondance (pas de copier-coller), fonctions de taille raisonnable, conventions de nommage respectées |
| Architecture | Code maintenable et évolutif pour faciliter les futures versions et la réactivité aux dysfonctionnements |
| Documentation | Manuel utilisateur (1 page), documentation support, release notes obligatoires |
| Livrables UML | Diagrammes à livrer 24h avant chaque version (Use Case, Séquence, Activité, Classes) |
Qu'est-ce qu'EasySave ?
EasySave est un logiciel de sauvegarde professionnel permettant aux utilisateurs de créer et gérer jusqu'à 5 travaux de sauvegarde. L'application supporte les sauvegardes complètes (copie intégrale) et différentielles (fichiers modifiés uniquement), avec une traçabilité complète via des logs JSON journaliers.
Fonctionnalités Principales (v1.0)
Multi-travaux
Gérez jusqu'à 5 travaux de sauvegarde simultanément avec configuration persistante
Sauvegarde Différentielle
Ne copie que les fichiers modifiés depuis la dernière sauvegarde pour optimiser le temps d'exécution
Multilingue (FR/EN)
Interface disponible en français et en anglais avec changement dynamique de langue
Logs Détaillés
Traçabilité complète au format JSON : horodatage, fichiers, taille, temps de transfert
État Temps Réel
Fichier state.json mis à jour en continu pour le monitoring externe
Supports Multiples
Compatible disques locaux, externes et lecteurs réseaux (chemins UNC)
Modes d'Utilisation
- Mode interactif : Menu console avec navigation guidée et gestion complète des travaux (création, modification, suppression, exécution)
- Mode ligne de commande : Exécution directe via arguments pour
l'automatisation et les scripts (
EasySave.exe 1-3)
Roadmap des Versions
Version Console (Livrable 1)
Application console complète avec toutes les fonctionnalités de base : gestion des travaux, sauvegardes complètes/différentielles, logs JSON, multilingue.
Interface Graphique (Livrable 2)
À venir — Migration vers une interface graphique WPF/MAUI tout en conservant la logique métier existante.
Version Avancée (Livrable 3)
À venir — Fonctionnalités avancées : cryptage, gestion des processus métier, supervision déportée.
Démarche Technique
Du cahier des charges à l'implémentation
Méthodologie de Conception
EasySave a été conçu avec UML (Unified Modeling Language) et le pattern MVC (Model-View-Controller), pour garder une architecture claire et évolutive.
Étapes de Conception
Analyse du Cahier des Charges
Identification des exigences fonctionnelles (5 travaux, 2 types de sauvegarde, multilingue) et des exigences techniques (logs JSON, état temps réel, DLL séparée).
Diagramme de Cas d'Utilisation
Modélisation des interactions entre l'utilisateur et le système. Identification de 6 cas d'utilisation principaux : Créer, Modifier, Supprimer, Exécuter, Lister les travaux, et Changer la langue.
Diagramme de Classes
Définition de l'architecture technique finale avec toutes les classes, leurs attributs, méthodes et relations. Ce diagramme a servi de référence pour l'implémentation du code.
Diagramme d'Activité
Représentation du flux global de l'application : démarrage → choix du mode (CLI ou interactif) → boucle de menu → exécution des actions. Ce diagramme a clarifié la logique de navigation.
Diagrammes de Séquence
Pour chaque cas d'utilisation, création d'un diagramme de séquence détaillant les interactions entre les objets : Controller → View → Service → Model. Ces diagrammes ont guidé l'implémentation des méthodes.
Implémentation MVC
Développement du code C# en respectant strictement le pattern MVC :
• Models : BackupJob, JobState, ProgressInfo
• Views : ConsoleView, LanguageManager
• Controllers : AppController
• Services : BackupService (Façade), JobManager, BackupExecutor,
StateManager
Stratégie Git
Le projet utilise GitFlow pour la gestion des branches :
main: Version stable de productiondevelop: Branche d'intégration des fonctionnalitésfeature/*: Développement de nouvelles fonctionnalitésdocs/*: Modifications de la documentation
La librairie EasyLog.dll est dans le même dépôt mais compilée en DLL à part pour pouvoir être réutilisée (y compris dans d'autres projets) et faire évoluer le logging sans toucher à l’application.
Patterns de Conception Utilisés
Façade
BackupService expose une interface simplifiée vers les sous-systèmes
(JobManager, BackupExecutor, ConfigurationManager).
Singleton
LanguageManager assure une seule instance pour les traductions dans toute l'application.
Observer
Les événements OnProgressUpdate permettent à la View de réagir aux changements
d'état des sauvegardes en temps réel.
MVC
Séparation entre données (Models), affichage (Views) et logique de contrôle (Controllers).
Installation
Prérequis et compilation du projet
Prérequis
.NET 10.0 SDK
Téléchargez et installez le SDK depuis le site officiel Microsoft
Télécharger .NET 10.0Compilation
Pour générer un exécutable autonome (self-contained), utilisez la commande correspondant à votre plateforme :
dotnet publish EasySave/EasySave.csproj -c Release -r win-x64 --self-contained true -o ./publish/windows
dotnet publish EasySave/EasySave.csproj -c Release -r osx-arm64 --self-contained true -o ./publish/macos
dotnet publish EasySave/EasySave.csproj -c Release -r osx-x64 --self-contained true -o ./publish/macos_intel
dotnet publish EasySave/EasySave.csproj -c Release -r linux-x64 --self-contained true -o ./publish/linux
Lancement rapide (développement)
dotnet run --project EasySave
Guide Utilisateur
Utilisation complète de l'interface interactive
Menu Principal
Au lancement sans arguments, EasySave affiche un menu interactif avec 7 options :
Les 7 Options du Menu
| Option | Fonction | Description |
|---|---|---|
| [1] | Lister les travaux | Affiche tous les travaux configurés avec leur ID, nom, source, destination et type |
| [2] | Créer un travail | Assistant de création guidé (nom, source, destination, type). Maximum 5 travaux. |
| [3] | Modifier un travail | Modifier n'importe quel champ d'un travail existant. Appuyer sur Entrée pour conserver la valeur actuelle. |
| [4] | Supprimer un travail | Supprime définitivement un travail après confirmation |
| [5] | Exécuter un travail | Lance la sauvegarde avec affichage de progression en temps réel |
| [6] | Changer la langue | Basculer entre Français (FR) et Anglais (EN) |
| [7] | Quitter | Ferme l'application proprement |
[1] Lister les Travaux
Affiche la liste de tous les travaux de sauvegarde configurés :
┌────┬─────────────────────┬───────────────────────┬───────────────────────┬──────────────┐ │ ID │ Nom │ Source │ Destination │ Type │ ├────┼─────────────────────┼───────────────────────┼───────────────────────┼──────────────┤ │ 1 │ Sauvegarde Docs │ C:\Users\Documents │ D:\Backup\Docs │ Complète │ │ 2 │ Sauvegarde Photos │ C:\Users\Pictures │ D:\Backup\Photos │ Différentiel │ └────┴─────────────────────┴───────────────────────┴───────────────────────┴──────────────┘
[2] Créer un Travail
Saisir le nom du travail
Donnez un nom descriptif unique (ex: "Sauvegarde Documents").
Le nom ne doit pas déjà exister.
Définir le répertoire source
Entrez le chemin complet du dossier à sauvegarder.
Supports : Disques locaux (C:\), externes (E:\), réseaux (\\server\share)
Définir le répertoire destination
Chemin où les fichiers seront copiés. Le dossier sera créé automatiquement s'il n'existe pas.
Choisir le type de sauvegarde
1 = Sauvegarde Complète : Copie tous les fichiers
2 = Sauvegarde Différentielle : Copie uniquement les
fichiers plus récents que la destination
Vous pouvez créer un maximum de 5 travaux de sauvegarde. Supprimez un travail existant si vous avez atteint la limite.
[3] Modifier un Travail
- Sélectionnez le numéro du travail à modifier
- Pour chaque champ, entrez la nouvelle valeur ou appuyez sur Entrée pour conserver la valeur actuelle
- Les modifications sont sauvegardées automatiquement
[4] Supprimer un Travail
- Sélectionnez le numéro du travail à supprimer
- Confirmez la suppression
- Le travail est définitivement supprimé du fichier
jobs.json
[5] Exécuter un Travail
Cette option permet de lancer des sauvegardes avec plusieurs formats de sélection :
| Format | Exemple | Description |
|---|---|---|
| Travail unique | 2 |
Exécute uniquement le travail n°2 |
| Liste de travaux | 1;3;5 |
Exécute les travaux 1, 3 et 5 séquentiellement |
| Plage de travaux | 1-4 |
Exécute les travaux de 1 à 4 inclus |
| Tous les travaux | * |
Exécute tous les travaux configurés |
Pendant l'exécution, deux barres de progression s'affichent :
• Progression globale : Avancement sur l'ensemble des travaux sélectionnés
• Progression du travail : Avancement du travail en cours
[6] Changer la Langue
EasySave supporte deux langues :
- Français (fr-FR) - Langue par défaut
- English (en-US)
Le choix est sauvegardé dans Data/settings.json et persiste entre les sessions.
[7] Quitter
Ferme proprement l'application. Toutes les configurations sont automatiquement sauvegardées.
Notes Importantes
Sauvegarde Automatique
Les travaux sont sauvegardés automatiquement après chaque création/modification
Validation des Chemins
Les chemins source et destination sont validés avant la création d'un travail
Logs Automatiques
Chaque transfert est automatiquement enregistré dans Data/Logs/
Différentiel Intelligent
Les sauvegardes différentielles sans fichiers modifiés sont automatiquement ignorées
Ligne de Commande
Exécution directe via arguments
Syntaxe
EasySave.exe <sélecteur_travaux>
Formats de sélection
| Format | Description | Exemple |
|---|---|---|
N |
Exécute un seul travail par son ID | EasySave.exe 1 |
N-M |
Exécute une plage de travaux (de N à M) | EasySave.exe 1-3 |
N;M;O |
Exécute une liste de travaux spécifiques | EasySave.exe 1;3;5 |
Exemples d'utilisation
./EasySave.exe 2
./EasySave.exe 1-3
./EasySave.exe 1;3;5
Conception (UML)
Diagrammes de modélisation du système
Cas d'Utilisation
Diagramme de Classes
Diagramme d'Activité
Diagrammes de Séquence
Créer un travail
Modifier un travail
Supprimer un travail
Exécuter un travail
Lister les travaux
Changer la langue
Architecture
Structure du projet et pattern MVC
Qu'est-ce que le Pattern MVC ?
Le pattern Model-View-Controller (MVC) est un patron d'architecture logicielle qui sépare une application en trois composants interconnectés. Cette séparation permet de découpler la représentation interne des données de la façon dont elles sont présentées à l'utilisateur.
Model (Modèle)
Représente les données et la logique métier. Le modèle est indépendant de l'interface utilisateur : il ne sait pas comment les données seront affichées.
Dans EasySave : BackupJob, JobState,
BackupType
View (Vue)
Responsable de l'affichage des données à l'utilisateur. La vue observe le modèle et se met à jour quand les données changent. Elle ne contient pas de logique métier.
Dans EasySave : ConsoleView, LanguageManager
Controller (Contrôleur)
Fait le lien entre le Model et la View. Il interprète les actions de l'utilisateur, met à jour le modèle et sélectionne la vue appropriée à afficher.
Dans EasySave : AppController
Pourquoi ce choix architectural ?
| Avantage | Bénéfice pour EasySave |
|---|---|
| Séparation des responsabilités | Chaque développeur peut travailler sur une couche sans impacter les autres. Le code est plus lisible et maintenable. |
| Testabilité | Les services peuvent être testés indépendamment de l'interface console. On peut mocker la View pour tester le Controller. |
| Évolutivité | Remplacer la ConsoleView par une interface graphique WPF/MAUI (v2.0) ne
nécessite aucune modification des Services ou Models. |
| Réutilisabilité | Les models BackupJob et JobState peuvent être réutilisés
dans d'autres projets ou API. |
| Maintenabilité | Un bug dans l'affichage ? → Modifier seulement ConsoleView. Un bug dans
la logique de sauvegarde ? → Modifier seulement BackupExecutor. |
Flux de Données dans EasySave
Voici comment les données circulent entre les différentes couches lors d'une action utilisateur :
L'utilisateur interagit avec la View
ConsoleView affiche le menu et capture le choix de l'utilisateur (ex: "5"
pour exécuter).
Le Controller interprète l'action
AppController reçoit le choix via HandleMenuChoice() et
détermine quelle action déclencher.
Les Services exécutent la logique métier
BackupService (façade) délègue à BackupExecutor qui copie les
fichiers et met à jour le JobState.
Les Models sont mis à jour
StateManager persiste le JobState dans state.json.
Le Logger écrit les entrées dans le log journalier.
La View est notifiée (Observer)
L'événement OnProgressUpdate est déclenché, permettant à
ConsoleView de rafraîchir la barre de progression.
Diagramme MVC Simplifié
EasySave implémente une variante du MVC adaptée aux applications console avec une couche Services supplémentaire :
Controllers
AppController.cs
Logique de navigation et orchestrationModels
BackupJob, JobState, BackupType
Définition des donnéesViews
ConsoleView, LanguageManager
Affichage console multilingueServices
BackupService, ConfigurationManager, StateManager
Logique métierDans un MVC pur, la logique métier est souvent dans le Controller. Ici, nous avons extrait cette logique dans une couche Services dédiée pour :
- Éviter les "fat controllers" (contrôleurs trop chargés)
- Permettre la réutilisation de la logique métier
- Faciliter les tests unitaires
- Respecter le principe de responsabilité unique (SRP)
Structure des fichiers
Modèles de Données
Classes POCO et structures de données du projet
Rôle des Modèles dans l'Architecture
Les modèles (ou Models) représentent les entités métier de l'application. Dans EasySave, ils sont implémentés sous forme de POCO (Plain Old CLR Objects) : des classes simples sans logique complexe, uniquement des propriétés.
POCO (Plain Old CLR Object)
Classes simples sans dépendances framework. Elles ne contiennent que des propriétés
get/set et sont facilement sérialisables.
Sérialisation JSON
Grâce aux attributs [JsonPropertyName], les modèles sont automatiquement
convertis en JSON pour la persistance (jobs.json, state.json).
Immutabilité partielle
Les propriétés ont des valeurs par défaut (string.Empty) pour limiter les
NullReferenceException et garder un état cohérent.
BackupJob
Représente un travail de sauvegarde configuré par l'utilisateur. Cette classe est
persistée dans jobs.json et chargée au démarrage de l'application.
| Propriété | Type | Description |
|---|---|---|
Id |
int | Identifiant unique (1 à 5) |
Name |
string | Nom du travail |
SourceDirectory |
string | Chemin du répertoire source |
TargetDirectory |
string | Chemin du répertoire destination |
Type |
BackupType | Complete ou Differential |
JobState
Représente l'état temps réel d'une sauvegarde en cours d'exécution. Cette classe est
mise à jour à chaque fichier copié et persistée dans state.json pour permettre un suivi
externe (ex: application de monitoring).
| Propriété | Type | Description |
|---|---|---|
JobName |
string | Nom du travail en cours |
State |
string | Active, Inactive, Finished, Error |
TotalFiles |
int | Nombre total de fichiers |
TotalSize |
long | Taille totale en octets |
FilesRemaining |
int | Fichiers restants à copier |
Progression |
double | Pourcentage (0-100) |
La classe JobState contient une méthode CalculateProgression() qui
calcule automatiquement le pourcentage d'avancement à partir du nombre de fichiers restants :
Progression = ((TotalFiles - FilesRemaining) / TotalFiles) × 100
BackupType (Enum)
Définit le type de sauvegarde à effectuer. Le choix du type impacte directement le
comportement de BackupExecutor lors de la copie des fichiers.
Complete
Copie intégrale de tous les fichiers du répertoire source vers la
destination, qu'ils existent déjà ou non.
Differential
Copie uniquement les fichiers dont la date de modification est plus
récente que celle du fichier destination. Optimise le temps de sauvegarde.
Une sauvegarde différentielle compare la source à la destination actuelle. Une sauvegarde incrémentielle (non implémentée dans v1.0) comparerait à la dernière sauvegarde effectuée. La différentielle est plus simple à implémenter et permet une restauration plus rapide.
Configuration
Fichiers de configuration et persistance des données
Emplacement des fichiers
Tous les fichiers de configuration sont stockés dans un dossier Data/ situé à côté de
l'exécutable :
EasySave.exe
Data/
├── jobs.json # Liste des travaux de sauvegarde
├── settings.json # Paramètres de l'application
├── state.json # État temps réel des sauvegardes
└── Logs/
└── 2026-02-03.json # Logs journaliers (un fichier par jour)
Fichier jobs.json
Contient la liste des travaux de sauvegarde configurés. Ce fichier est créé automatiquement au premier lancement.
[
{
"id": 1,
"name": "Sauvegarde Documents",
"sourceDirectory": "C:\\Users\\Documents",
"targetDirectory": "D:\\Backup\\Documents",
"type": 0
},
{
"id": 2,
"name": "Sauvegarde Photos",
"sourceDirectory": "C:\\Users\\Pictures",
"targetDirectory": "D:\\Backup\\Pictures",
"type": 1
}
]
Dans le fichier JSON, le type est représenté par un entier :
0= Sauvegarde complète (Complete)1= Sauvegarde différentielle (Differential)
Fichier settings.json
Contient les paramètres globaux de l'application, notamment la langue sélectionnée.
{
"language": "fr-FR"
}
| Propriété | Valeurs possibles | Description |
|---|---|---|
language |
fr-FR, en-US |
Langue de l'interface utilisateur |
EasyLog.dll
Librairie de logging réutilisable
Pourquoi une DLL séparée ?
Le cahier des charges impose une librairie de logging distincte. EasyLog est donc compilé en DLL séparée : réutilisable dans d'autres projets, compatible avec les évolutions d'EasySave, et isolée du reste du code.
Structure du Projet
EasySave/
├── EasySave/ # Application principale
│ └── EasySave.csproj # Référence EasyLog
│
├── EasyLog/ # Projet DLL
│ ├── EasyLog.csproj # Compile en DLL
│ └── Logger.cs # Classe principale
│
└── EasySave.sln # Solution regroupant les 2 projets
API de la Classe Logger
| Méthode | Description |
|---|---|
Logger(string storageDirectory) |
Constructeur - initialise le répertoire de stockage des logs |
Log(name, source, dest, size, transferTime) |
Enregistre un transfert de fichier réussi |
LogError(name, source, dest, size, errorCode) |
Enregistre une erreur (temps négatif) |
LogDirectoryCreated(name, directoryPath) |
Enregistre la création d'un répertoire |
LogJobAction(action, jobName) |
Enregistre une action sur un travail (CREATED, MODIFIED, DELETED) |
Structure d'une Entrée de Log
| Propriété | Type | Description |
|---|---|---|
Name |
string | Nom du travail de sauvegarde |
Timestamp |
DateTime | Horodatage de l'action |
SourcePath |
string | Chemin source au format UNC |
DestinationPath |
string | Chemin destination au format UNC |
FileSize |
long | Taille du fichier en octets |
TransferTimeMs |
long | Temps de transfert (négatif si erreur) |
Conversion UNC
Tous les chemins sont automatiquement convertis au format UNC (Universal Naming Convention) pour compatibilité avec les serveurs et lecteurs réseaux :
Chemin local : C:\Users\Documents\file.txt
Chemin UNC : \\?\C:\Users\Documents\file.txt
Chemin réseau : \\server\share\file.txt
Chemin UNC : \\server\share\file.txt (inchangé)
Fichier Log Journalier
Les logs sont enregistrés dans des fichiers journaliers au format YYYY-MM-DD.json :
[
{
"Name": "Sauvegarde Documents",
"Timestamp": "2026-02-05T14:30:45",
"SourcePath": "\\\\?\\C:\\Users\\Documents\\rapport.docx",
"DestinationPath": "\\\\?\\D:\\Backup\\Documents\\rapport.docx",
"FileSize": 245760,
"TransferTimeMs": 45
},
{
"Name": "Sauvegarde Documents",
"Timestamp": "2026-02-05T14:30:46",
"SourcePath": "\\\\?\\C:\\Users\\Documents\\image.png",
"DestinationPath": "\\\\?\\D:\\Backup\\Documents\\image.png",
"FileSize": 1048576,
"TransferTimeMs": 120
},
{
"Name": "[CREATED] Sauvegarde Photos",
"Timestamp": "2026-02-05T15:00:00",
"SourcePath": "",
"DestinationPath": "",
"FileSize": 0,
"TransferTimeMs": 0
}
]
Lorsqu'une erreur survient, TransferTimeMs contient une valeur
négative :
-1: Limite de travaux atteinte-2: Chemins invalides-3: Répertoire source inexistant-4: Nom de travail en doublon
Logs & États
Fichiers de suivi et traçabilité
Fichiers de log journaliers
Chaque transfert de fichier est enregistré dans un fichier JSON par jour (YYYY-MM-DD.json), dans le dossier Data/Logs/.
{
"timestamp": "2026-02-03T15:30:45",
"jobName": "Sauvegarde Documents",
"sourceFile": "C:\\Users\\Documents\\rapport.docx",
"targetFile": "D:\\Backup\\Documents\\rapport.docx",
"fileSize": 245760,
"transferTimeMs": 45
}
Les logs sont stockés dans le sous-dossier Logs/ du répertoire de configuration de
l'application.
Fichier d'État (state.json)
L'état temps réel des sauvegardes est maintenu dans un fichier JSON actualisé en continu.
{
"jobName": "Sauvegarde Documents",
"timestamp": "2026-02-03T15:30:50",
"state": "Active",
"totalFiles": 150,
"totalSize": 52428800,
"filesRemaining": 75,
"sizeRemaining": 26214400,
"currentSourceFile": "C:\\Users\\Documents\\images\\photo.jpg",
"currentTargetFile": "D:\\Backup\\Documents\\images\\photo.jpg",
"progression": 50.0
}
États possibles
Active
Sauvegarde en cours d'exécution
Inactive
Aucune sauvegarde en cours
Finished
Sauvegarde terminée avec succès
Error
Une erreur s'est produite
Bibliothèque EasyLog
Le module EasyLog est une DLL séparée qui gère l'écriture des logs. Elle offre les
fonctionnalités suivantes :
Logs journaliers
Un fichier par jour au format YYYY-MM-DD.json
Format UNC
Les chemins sont convertis au format UNC pour compatibilité réseau
Gestion des erreurs
Temps de transfert négatif en cas d'erreur
Thread-safe
Écriture sécurisée pour accès concurrent
Lorsqu'une erreur survient lors du transfert, le champ transferTimeMs contient une
valeur négative représentant le code d'erreur.
Support Multilingue
Gestion des langues et traductions
Langues supportées
EasySave supporte actuellement deux langues :
| Code | Langue | Fichier de ressources |
|---|---|---|
fr-FR |
Français (par défaut) | Resources/lang_fr.json |
en-US |
Anglais | Resources/lang_en.json |
Changement de langue
La langue peut être modifiée via l'option 6 du menu principal. Le changement est immédiat et la
préférence est sauvegardée dans settings.json.
Fichiers de traduction
Les traductions sont stockées dans des fichiers JSON situés dans le dossier Resources/ :
{
"MenuOption1": "1. Lister les travaux",
"MenuOption2": "2. Créer un travail",
"MenuOption3": "3. Modifier un travail",
"JobCreated": "Travail créé avec succès !",
"JobDeleted": "Travail supprimé avec succès !",
"MaxJobsReached": "Erreur : Limite de 5 travaux atteinte."
}
Architecture du LanguageManager
Le gestionnaire de langues utilise le pattern Singleton pour garantir une instance unique dans toute l'application.
| Méthode | Description |
|---|---|
Instance |
Propriété statique retournant l'instance unique |
LoadLanguage(string) |
Charge un fichier de langue (fr-FR ou en-US) |
GetString(string) |
Retourne la traduction pour une clé donnée |
CurrentLanguage |
Retourne le code de la langue actuelle |
Si les fichiers de traduction sont manquants ou corrompus, le LanguageManager utilise des traductions intégrées dans le code source.
Conformité au Cahier des Charges
Synthèse du respect de toutes les exigences du CDC v1.0
Synthèse
Les tableaux ci-dessous rattachent chaque exigence du CDC à son implémentation dans le projet.
Exigences Fonctionnelles
| Exigence CDC | Statut | Implémentation |
|---|---|---|
| Application Console .NET | ✓ | Projet console .NET 10.0 (EasySave.csproj) |
| Maximum 5 travaux de sauvegarde | ✓ | Constante MaxJobs = 5 dans JobManager.cs |
| Définition travail (nom, source, cible, type) | ✓ | Classe BackupJob avec propriétés Id, Name, SourceDirectory,
TargetDirectory, Type |
| Sauvegarde complète | ✓ | Enum BackupType.Complete - copie tous les fichiers |
| Sauvegarde différentielle | ✓ | Enum BackupType.Differential - copie uniquement les fichiers modifiés
(date) |
| Support multilingue (FR/EN) | ✓ | LanguageManager (Singleton) + fichiers lang_fr.json,
lang_en.json
|
| Exécution séquentielle de tous les travaux | ✓ | Méthode ExecuteAllJobs() dans BackupExecutor |
| Exécution via ligne de commande | ✓ | RunCommandLineMode() dans AppController |
Format CLI : EasySave.exe 1-3 (plage) |
✓ | InputParser.ParseJobIds() supporte format N-M |
Format CLI : EasySave.exe 1;3 (liste) |
✓ | InputParser.ParseJobIds() supporte format N;M;O |
Exigences Techniques - Stockage
| Exigence CDC | Statut | Implémentation |
|---|---|---|
| Support disques locaux | ✓ | Chemins standards (C:\, D:\...) |
| Support disques externes | ✓ | Tout chemin valide accessible par le système |
| Support lecteurs réseaux (UNC) | ✓ | Méthode ConvertToUncPath() dans Logger.cs |
| Sauvegarde fichiers + sous-répertoires | ✓ | Récursion dans ProcessDirectory() de BackupExecutor |
Exigences Techniques - Logging & État
| Exigence CDC | Statut | Implémentation |
|---|---|---|
| Fichier log journalier | ✓ | Format YYYY-MM-DD.json via GetDailyLogFileName() |
| Contenu log : horodatage, nom, source, dest, taille, temps | ✓ | Classe LogEntry avec tous les champs requis |
| Temps de transfert négatif si erreur | ✓ | Méthode LogError() avec code négatif |
| DLL séparée nommée EasyLog.dll | ✓ | Projet distinct EasyLog/ compilé en DLL |
| Fichier état temps réel unique | ✓ | state.json géré par StateManager |
| État : nom travail, horodatage, statut | ✓ | Classe JobState avec JobName, Timestamp, State |
| État actif : total fichiers, taille, progression | ✓ | TotalFiles, TotalSize, Progression,
FilesRemaining
|
| État actif : fichiers source/dest en cours | ✓ | CurrentSourceFile, CurrentTargetFile |
| Emplacement flexible (pas c:\temp) | ✓ | Dossier Data/ relatif à l'exécutable |
| Format JSON avec retours à la ligne | ✓ | WriteIndented = true dans JsonSerializerOptions |
L'architecture MVC actuelle a été conçue pour faciliter la migration vers une interface graphique
MVVM dans la future version 2.0. La séparation claire entre la logique métier (Services) et
l'affichage (Views) permettra de remplacer ConsoleView par une interface WPF/MAUI
sans modifier les services.
Notes de Version
Historique des versions d'EasySave
Fonctionnalités principales
- Application Console (.NET)
- Gestion de 5 travaux de sauvegarde maximum
- Sauvegardes complètes et différentielles
- Support multilingue (Français / Anglais)
- Exécution séquentielle ou spécifique (CLI)
Technique
- Architecture MVC
- Logs journaliers au format JSON (via EasyLog.dll)
- État d'avancement temps réel (JSON)
- Support des chemins UNC et lecteurs réseaux