Il n’était pas possible d’utiliser la classe « Translations » dans le portail afin d’afficher les termes de traductions, ceux-ci n’étant utilisés qu’à travers du SQL sur les pages permettant de les gérer.
Une couche d’abstraction a donc été implémentée afin de rendre accessible la récupération des termes de traductions. Il s’agit d’un mélange des patrons de conception de type « Stratégie » (ou « Strategy pattern ») et « Patron de méthode » (ou « Template method pattern »). Ceci permet d’externaliser la logique de récupération tout en rendant disponible les méthodes.
Un interface « ITranslate » a été créée afin d’identifier les classes permettant de récupérer les traductions. Cette interface contient uniquement des méthodes de récupération des traductions ainsi qu’une méthode d’initialisation. Il n’y a aucune méthode permettant de modifier ou créer des termes car ceci n’est pas le but de cette interface.
La classe « Term » a été créée afin de gérer les implémentations de « ITranslate » et d’initialiser celle souhaitée afin de récupérer les termes.
Cette abstraction permet de modifier en tout temps la logique de récupération des termes, simplement en modifiant la classe héritant de « ITranslate » qui est choisie dans la classe « Term ».
La classe « Translations » n’a pas été modifiée afin d’éviter tout problème avec d’autres développements. En effet, la classe « Term » se trouve dans la DLL « Artionet.IceCube.Interfaces », ce qui lui permet d’être potentiellement accessible depuis n’importe quel développement (binding, providers mais aussi prestations des guichets, etc.).
Afin de pouvoir travailler correctement avec la classe « Translations » qui est un singleton, l’interface est implémentée sur un wrapper de la classe « Translations », « TranslationsWrapper ».
À terme, il faudrait que l’utilisation de « Translations » soit remplacée par l’utilisation de « Term », finalisant ainsi cette abstraction.