Refactoring de la classe UserManager
Description de l’amélioration
La classe UserManager
possède plusieurs rôles. Un de gestion utilisateurs et un autre de gestion des mots de passe.
Si l'on veut respecter les principes de la programmation objet une classe doit n'avoir qu'un rôle principal.
L'objectif de cette issue est donc la division des logiques user managing (ajout/suppression/..) et password managing (test/chiffrement). Une attention particulière sera portée sur l'écriture des tests qui devront permettre de vérifier que les changements apportés ne cassent pas le programme.
Choix des tests à effectuer
UserManager
:
Détail des tests sur la classe - Vérifier que les méthodes conservées fonctionnent toujours de manière correcte.
- Test de la méthode
hasUser
- Avec un utilisateur qui n'a pas été ajouté
- Avec un utilisateur qui a été ajouté
- Test de la méthode
addUser
- Lorsque l'utilisateur existe déjà dans le manager
- Avec un utilisateur qui n'existe pas
- Test de la méthode
removeUser
- Lorsque l'utilisateur existe pas dans le manager
- Avec un utilisateur qui existe et qui peut être supprimé.
- Test de la méthode
PasswordManager
:
Détail des tests sur la futur classe - Contrôler que la fonction déplacée
validatePassword
fonctionne de manière correct dans les cas suivant c'est à dire :- Avec un utilisateur et mot de passe erroné
- Avec un utilisateur et un bon mot de passe
- Vérifier le fonctionnement de la méthode
createPassword
qui gère le chiffrement du mot de passe de l'utilisateur :- Tester la méthode puis vérifier avec
validatePassword
- Tester la méthode puis vérifier avec
- Nous ne testerons pas dans cette issue le bon fonctionnement de la partie chiffrement de mot de passe qui ferra l'objet d'une autre issue
Person
:
Détail des tests sur la classe - Vérifier que la classe refuse les mots de passe
null
et les chaînes de caractères vide.
Solution à mettre en œuvre
Les changements ici consiste principalement a :
- Il est nécessaire de scindée la classe
UserManager
en deux :- La classe
UserManager
ne va géré que les comptes utilisateurs. - La classe
PasswordManager
ne va géré que la partie validation et chiffrement de mot de passe.
- La classe
- Changement sur la classe
UserManager
:- L’attribut
usersToPasswords
qui concerne le stockage de mot de passe sera maintenant un attribut propre à la classePerson
au même titre que son nom ou son rôle. - La méthode
validatePassword
qui permet de tester un mot de passe doit être déplacée. - Enfin les méthodes
encryptPassword
etdecryptPassword
qui concernent uniquement la logique mot de passe et seront déplacé; - La classe sera liée à une instance de
PasswordManager
pour mettre à jour les mots de passe des comptes.
- L’attribut
- Détail sur la création de
PasswordManager
- Cette classe ne gère que la logique de hash et vérification de mot de passe.
-
Attention elle n'est pas chargée de vérifier si un utilisateur est présent ou non dans le
UserManager
-
Attention elle n'est pas chargée de vérifier si un utilisateur est présent ou non dans le
- Une méthode
createPassword
dont la portée est limité au package est crée pour mettre à jour le mot de passe d'un utilisateur.
- Cette classe ne gère que la logique de hash et vérification de mot de passe.
Issue numéro 10 dans l’énoncé