Quelques avis sur la classe TopiaContextFactory
Salut, Je viens de regarder de plus près la classe org.nuiton.topia.TopiaContextFactory et je suis un peu confus par ce que j'y lis. 1) Tout d'abord le cache des context est basé sur une implémentation ? protected static Map<Properties, TopiaContextImpl> contextCache = ... Ca paraît un peu violent, moi qui voulait écrire une nouvelle implantation de TopiaContext je suis bien embété... --> bon j'ai corrigé cet anti-pattern : TopiaContextImpl ne devrait jamais être déclaré nulle-part; pour moi on devrait même avoir une méthode de factory qui l'instancie et son constructeur devrait être protected ou private. 2) Il y a des algorithmes dont je comprends vraiment pas le sens dont celui de la méthode TopiaContext getContext(Properties config) On y modifie une configuration d'entrée même si le context est déjà en cache pour la config. Il faudrait qu'on regarde à nouveau cette méthode car là cela me parait bien mystérieux l'histoire de mettre en cache sur un clone d'une version modifié d'une map d'entrée... Si quelqu'un a une explication je suis preneur. Pour moi on devrait mettre en cache sur la donnée d'entrée non modifiée et la map utilisée par le TopiaContextImpl devrait elle être un clone de la map d'entrée + transfo sur les hiérachie. Il faut aller voir le code existant pour bien comprendre je pense... A vos avis :) -- Tony Chemit -------------------- tél: +33 (0) 2 40 50 29 28 email: chemit@codelutin.com http://www.codelutin.com
On Tue, 1 Mar 2011 15:20:48 +0000 chemit <chemit@codelutin.com> wrote:
Il faudrait qu'on regarde à nouveau cette méthode car là cela me parait bien mystérieux l'histoire de mettre en cache sur un clone d'une version modifié d'une map d'entrée...
Si quelqu'un a une explication je suis preneur.
Pour moi c'est le bon comportement. On souhaite associe un RootContext a la config qui permet de l'avoir. C'est bien la config utilisé par le RootContext qui doit permettre de le retrouver et non pas autre chose (qui serait faux) Si on prend ce que tu dis, c-a-d la cle est l'objet passer en parametre, et ensuite seulement les proprietes sont rearange et une copie est faite. Alors dans ce cas, si la personne, modifie l'objet initial passé en parametre pour par exemple modifier l'url de base de données, on va lui retourner le mauvais RootContext car les cles seront bien egales, mais l'objet associé ne correspondra plus a la config. -- Benjamin POUSSIN -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com http://www.codelutin.com
participants (2)
-
Benjamin POUSSIN -
chemit