Repository navigation
Outils de désérialisation de paramétrage : désérialisation alternative et multiple #182
indyteo
started this conversation in
Miscellaneous
Replies: 1 comment 1 reply
|
Pour ma part, je n'ai pas d'avis pour la A), les deux sont assez équivalents et tous les deux possibles sans trop de différence dans le code. Pour la B) je préfère largement l'option 2 qui vient se factoriser avec le |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Suite à une discussion passée au sujet des outils Jackson pour le paramétrage, voici 2 propositions relatives à l'implémentation technique de 2 de ces outils, ayant un impact sur leur utilisation dans le reste du code des paramètres.
Bien évidemment, les noms sont à discuter, ce n'est qu'une proposition de ce à quoi ça pourrait ressembler.
A) Désérialisation par "alternative"
En ce qui concerne la désérialisation par "alternative", c'est-à-dire essayer plusieurs types et prendre le 1er qui fonctionne, l'implémentation technique est assez triviale, mais on a 2 façons d'écrire la liste des alternatives sous forme d'annotation.
Dans les deux cas, on considère que
SecondParamshérite deFirstParams, tandis queThirdParamsnon (mais on dispose d'un convertisseur dansFirstParamspour le créer à partir d'unThirdParams)Dans ces exemples, l'annotation est placée au niveau du champ (donc pour affecter 1 désérialiseur spécifique), mais elle pourrait se trouver au niveau de la déclaration du type
FirstParams(pour affecter tous ses usages).Option A.1
Option A.2
B) Désérialisation multiple
Pour le fait de pouvoir désérialiser plusieurs objets à partir d'un même paramétrage, c'est-à-dire essayer plusieurs types et prendre tous ceux qui fonctionnent, on a 2 possibilités d'implémentation technique assez différentes. Chacune ont des implications très différentes sur l'usage dans les classes de paramétrage.
Option B.1
On considère que
FirstParams,SecondParamsetThirdParamshéritent tous deOurParams.L'annotation ne peut être placée qu'au niveau d'un champ de type collection, et toutes les classes qu'on essaye de désérialiser doivent hériter d'une classe commune pour être stockées dans cette collection.
Option B.2
Aucun héritage spécifique n'est nécessaire.
L'annotation ne peut être placée qu'au niveau de la déclaration d'une classe, qui devient par la même occasion un wrapper (similaire à la logique qui a déjà été implémentée dans la PR #172).
En revanche, ça permet un contrôle fin sur les champs à désérialiser, avec des politiques adaptées à chacune.
All reactions