Bonjour tout le monde,
J'ai un problème pûrement algorithmique assez gênant et délicat que je voudrais soumettre à votre sagacité.
Je travaille sur une application J2EE dans laquelle tous les types énumérés sont stockés dans la base de données. Autrement dit, en fonction du type énuméré, certains ont leurs propres tables avec un code et un texte dans toutes les langues, tandis que d'autres sont stockés dans une table générique avec une colonne pour identifier le type, et un lien vers une autre table qui contient les textes dans toutes les langues.
Par exemple, le type enuméré exprimé en Java5 comme suit:
Va pouvoir être représentée dans la table générique TYPE sous la forme suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public enum PrinterType{ LASER(new String[][]{ {"fr", "Imprimante laser"}, {"en", "Laser Printer"} }), BUBBLE_JET(new String[][]{ {"fr", "Imprimante à jet d'encre"}, {"en","Bubble jet printer"} }), SUBLIMATION(new String[][]{ {"fr", "Imprimante à sublimation thermique"}, {"en", "Thermal sublimation printer"} }); private Map<String, String> texts; private PrinterType(String[][] texts){ texts = new HashMap<String, String>(); for(String[] text : texts){ texts.put(text[0], text[1]); } } public getText(String language){ return texts.get(language); } }
- family='PRN_TYPE', code='LASER', text='1'
- family='PRN_TYPE', code='BUBBLE_JET', text='2'
- family='PRN_TYPE', code='SUBLIMATION', text='3'
Et dans la table TYPE_TEXT:
- textid='1', language='fr', text='Imprimante laser'
- textid='2', language='en', text='Laser Printer'
-...
Et bien sûr, l'utilisateur veut pouvoir modifier les caractéristiques de ces types énumérés en passant par la base sans avoir à toucher au code, ce qui rend l'approche type-safe enum prise en exemple complètement impensable. En fait, ni la liste des valeurs possibles pour un type, ni les textes associés à chacune des valeurs ne doit être hard-codée.
Ma question est la suivante: est-ce que vous connaisser un design pattern ou un concept qui permet d'implémenter ce genre de choses en assurant un minimum de contrôle de type, tout en gardant la possibilité d'initialiser la liste des valeurs possibles et tous les attributs associés au moment de l'exécution du programme.
Je suis sûr qu'il existe un moyen en faisant joujou avec les Generics mais pour l'instant je sèche un peu.
Des suggestions?
Partager