Application de gestion de bibliothèque permettant à des lecteurs de consulter un catalogue de livres, de les mettre en favoris et de les évaluer, et à des administrateurs de gérer le catalogue et les comptes utilisateurs.
Projet réalisé en C# / .NET 9 avec .NET MAUI, organisé selon une architecture MVVM en quatre projets avec injection de dépendances et tests unitaires.
Statut — projet scolaire (DEC en Techniques de l'informatique, profil Génie logiciel). Cible : Android, iOS, macOS et Windows à partir d'une base de code unique.
Côté lecteur
- Authentification par compte avec gestion des rôles (
RoleCompte) et session utilisateur persistante - Consultation du catalogue de livres avec page de détail
- Gestion d'une liste de favoris personnelle
- Évaluation des livres
Côté administrateur
- Tableau de bord dédié
- Ajout de livres au catalogue
- Suppression de livres
- Gestion des comptes utilisateurs
La solution est découpée en quatre projets pour isoler les responsabilités et rendre la logique métier testable indépendamment de l'interface.
View.sln
├── Bibliotheque.Model/ # Entités du domaine — aucune dépendance
│ ├── Livre.cs
│ ├── Compte.cs
│ ├── RoleCompte.cs
│ ├── SessionUtilisateur.cs
│ └── ResultatAuthentification.cs
│
├── Bibliotheque.Services/ # Logique métier, derrière des interfaces
│ ├── IAuthService.cs / AuthService.cs
│ ├── IBibliothequeXmlService.cs / BibliothequeXmlService.cs
│ └── IFavorisService.cs / FavorisService.cs
│
├── Bibliotheque.ViewModel/ # ViewModels MVVM
│ ├── BaseViewModel.cs # INotifyPropertyChanged mutualisé
│ ├── LoginViewModel.cs
│ ├── ListeLivresViewModel.cs
│ ├── DetailLivreViewModel.cs
│ ├── FavorisViewModel.cs
│ ├── EvaluationViewModel.cs
│ └── Admin*ViewModel.cs
│
├── View/ # Interface .NET MAUI (XAML)
│ ├── AppShell.xaml # Navigation
│ └── *Page.xaml # Une page par écran
│
└── Bibliotheque.Tests/ # Tests unitaires
├── BibliothequeXmlServiceTests.cs
└── LivresTests.cs
Choix techniques
- MVVM strict — les pages XAML ne contiennent pas de logique métier ; tout passe par les ViewModels, ce qui rend l'application testable sans lancer l'interface.
- Programmation par interfaces — chaque service est exposé via une interface (
IAuthService,IBibliothequeXmlService,IFavorisService) et injecté depuisMauiProgram.cs. Remplacer la persistance XML par une base de données ne demanderait que d'écrire une nouvelle implémentation. - Persistance XML — sérialisation du catalogue et des comptes dans des fichiers XML, sans dépendance externe ni serveur.
- Tests unitaires — la couche services est couverte par des tests, indépendamment de l'interface.
| Langage | C# / .NET 9 |
| Interface | .NET MAUI (XAML) |
| Architecture | MVVM, injection de dépendances |
| Persistance | Sérialisation XML |
| Tests | Projet de tests unitaires dédié |
| Plateformes | Android 21+, iOS 15+, macOS (Mac Catalyst) 15+, Windows 10 17763+ |
Prérequis — .NET 9 SDK et la charge de travail MAUI :
dotnet workload install mauiCloner et compiler :
git clone https://github.com/MinaSeliman1/View.git
cd View
dotnet restore
dotnet buildLancer sur Windows :
dotnet run --project View --framework net9.0-windows10.0.19041.0Lancer sur Android (émulateur démarré) :
dotnet build View --framework net9.0-android -t:RunExécuter les tests :
dotnet testCaptures d'écran à venir.
- Structurer une solution .NET en couches indépendantes plutôt qu'en un seul projet monolithique
- Appliquer MVVM pour séparer réellement l'interface de la logique métier
- Concevoir des services derrière des interfaces pour les rendre substituables et testables
- Écrire des tests unitaires sur une couche métier
- Gérer l'authentification et des permissions par rôle dans une application cliente
Mina Seliman — étudiant en Techniques de l'informatique, profil Génie logiciel