Les grands esprits se rencontrent ?

Depuis des années, dans les différents projets sur lesquels je travaille, il y a un package que je crée toujours : com.masociete.monprojet.utils.patterns. Dans ce projet, je ne mets que des annotations (avant, je ne mettais que des tagging interfaces, c'est-à-dire des interfaces ne définissant aucune méthode). Et ces annotations/interfaces (en fait, que ce soit l'un ou l'autre, ça ne change absolument rien, c'est juste que les annotations sont la façon officielle de faire du déclaratif) étaient souvent
  • @Singleton : chaque classe utilisant cette annotation est un singleton (et donc définit une méthode statique getInstance() retournant un objet de cette classe) … rassurez-vous, dans mes codes post-IoC (et plus encore post-OSGi), ça n'existe plus.
  • @Factory : une classe utilisant cette interface dispose de méthodes create* retournant des objets d'une autre classe. Dans certaines versions modernes, il y a même des @Factory(create=[Bidule.class]).
A quoi ça sert ? A documenter le code d'une façon compilable. C'est-à-dire qu'au lieu de simplement dire dans la doc "c'est un singleton" sans jamais l'écrire d'une manière compilée, ça n'empêche pas les gens d'appeler leur méthode getThisInstanceThatIsSoCool(), ce qui sera beaucoup plus difficile à vérifier. Alors que là, je peux tout à fait écrire un test paramétré prenant comme paramètre la liste des classes annotées @Singleton (récupérable très facilement grâce à Reflections, ou au ServiceLoader de Java6, par exemple). En fait, tout ça, c'est dans le but encore une fois de maintenir les spécifications aussi prés du code que possible. Donc, c'est une bonne idée.

Et ce matin, en lisant ma newsletter des javaspecialists, j'apprends que Heinz Kabutz s'intéresse aux imprimnates 3D (ce qui me permet juste de placer ce lien fascinant sur une assembleuse de modéles Lego en Lego complètement automatique – la vidéo vaut son pesant de cacahuétes), mais aussi à ces annotations d'architecture, pour lesquelles il a même créé le projet jpatterns. Alors évidement, c'est du git (auquel je crois que je suis allergique by design), il n'y a pas encore d'artefact maven (mais ça, ça va s'arranger dès que je vais leur parler), mais je trouve l'idée tout à fait prometteuse – et surtout bien mieux implémentée que ce à quoi je pouvais penser. En fait, ce qui est génial, c'est que le test dont je parlais plus haut pourrait tout à fait être implémenté par ce projet qui, en farfouillant dans le code l'utilisant, pourrait déterminer si, de son point de vue, les patterns sont correctement implémentés. Encore faut-il avoir de ces patterns une définition claire …

Cela dit, vivement qu'il y ait un artefact maven à fourrer dans mon projet !
Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s