Ajout d'un Container pour l'injection de dépendance.
Motivation
Lors de la création de l'interface graphique nous nous sommes demandé comment accéder à des classe comme UserManager
dans plusieurs partie de l’application. Naïvement j'ai pensé utiliser les Singletons pour le coté pratique et le fait que je savais les implémenter facilement. Cependant après réflexion avec le groupe et les chargés de TP il serait préférable de choisir de faire de l'injection de dépendance.
L’objectif de cette issue est donc de crée une classe Container
qui sera passée dans le constructeur des contrôleurs et s'occupera de l'injection des dépendances. De plus cette issues est également chargée de refactorer les classes UserManager
et PasswordManager
qui utilisé le principe du Singleton.
Point qui justifie l'utilisation d'un container pour l'injection de dépendance
- Lazy loading : Les objets ne sont pas chargé tant qu'il ne sont pas utilisé.
Choix des tests à effectuer
Container
Test du - Vérification de la méthode d'ajout de définition.
- Vérification que deux appel à
get(java.lang.class)
retourne le même objet. - Essai de
get(java.lang.class)
lorsque qu'aucune définition n'existe.
Solution à mettre en œuvre
Choix concernant les définitions :
- Les définitions qui servent à la création des objets sont des
Callable<Object>
. - Les définitions peuvent se servir du container.
- Exemple
() -> new MyObject("prod", new MyDependancy());
Spécification de la classe :
- Un attribut
HashMap<String, Object>
pour la sauvegarde des instances des objets - Un attribut
HashMap<String, Callable<Object>>
pour la sauvegarde des définitions des objets - Une méthode
get(java.lang.class)
qui se charge de créer l’objet spécifier. - Une méthode
addDefinition(java.lang.Class, Callable<Object>)
qui se charge d'ajouter une définition. - Une méthode
create(java.lang.Class)
qui se charge juste de créer l'instance si celle si n'existe pas. - Une Exception
DefinitionNotFound
lors de la création d'une objet sans définition.
Issue hors énoncé