Modification de la gestion des rôles / Refactor classe person
Refactorer la classe Person
, pour faire la distinction entre les agents et les administrateurs.
Un agent possède un calendrier de voyages et peut réserver des voyages, tandis qu'un administrateur ne voyage pas mais peut réserver des voyages pour les agents.
Problème : Gestion des rôles codés en dur dans l'application à travers des string ce qui est une mauvaise pratique de conception car cela rajoute des conditions dans chaque méthodes qui seraient inutiles si on avait une classe par Role.
Solution : Appliquer le design pattern 'State' à la gestion des rôles, on crée une classe abstraite pour Role puis deux classes concrètes héritant de celle-ci, Admin et Agent. Admin peut ajouter un Travel à un agent et Agent peut récupérer son calendrier de Travels. On va tester les appels de ces méthodes par les deux rôles et récupérer une exception si le rôle n'est pas autorisé à effectuer l'opération.