2010-08-09 3 views
3

Supposons que vous ayez une application Web qui comporte un grand nombre de règles métier construites autour de la comparaison if-then des constantes String. Ils sont utilisés à la fois sur le code côté client et le code backend, et sont pour le moment mal codés en dur dans les deux endroits, avec beaucoup de duplication et parfois des erreurs. Quelle est la manière sensée de les refactoriser? Malheureusement, dans la plupart des cas, ils doivent exister car l'utilisation du polymorphisme serait beaucoup plus hideuse. Quelque chose de spécifique à flex/java? Existe-t-il un moyen facile de conserver toutes ces constantes au même endroit et de les compiler en code client et serveur? Editer: Je suis vraiment à la recherche d'un moyen de partager des constantes de chaîne entre flex et java avec la vérification à la compilation de tout. La seule idée à laquelle je peux penser est un générateur de code. Conservez-les dans un projet qui est distribué en tant que pot.Stratégie pour maintenir la synchronisation des chaînes de caractères entre java/flex?

Répondre

1

La génération de code est plus facile que tu penses. Si vous croyez vraiment que c'est ce que vous devez faire, je pourrais fournir un exemple (une tâche Ant personnalisée bien qu'elle puisse être exécutée en tant qu'application 'principale' java) que vous pourriez modifier pour vos besoins (en particulier pour les constantes de chaîne) si tu veux. Si je comprends bien, vous cherchez quelque chose qui vous fournit une vérification de "clé" au moment de la compilation (qui vous donnerait aussi un support automatique)? Alors oui, un fichier de propriétés n'aiderait pas beaucoup ici.

+0

oui, c'est exactement ce dont j'ai besoin. – gtrak

+0

En fait, il s'avère que ce code n'a pas du tout besoin de modification, il vous suffit de configurer vos constantes Java en tant que "public static final String" (et de placer la classe au bon endroit). Donc, votre principal défi sera de comprendre comment cela fonctionne. Il est commenté mais vous devrez peut-être encore prendre le temps de le comprendre: http://www.megaupload.com/?d=8PEPWVZM Peut-être que je ferai une sortie plus «formelle» de ce jour si quelqu'un le trouve utile , J'ai toujours pensé qu'il y avait déjà de meilleures choses, mais personne ne suggère quoi que ce soit. Faites-moi savoir si cela aide du tout ... – Manius

0

Vous pouvez également y placer toutes les classes util pour éviter la duplication de code.

+0

Intéressant, mais ne m'aide pas à les réutiliser flex-side, non? – gtrak

+0

Bien sûr que oui! Utilisez simplement cette bibliothèque (contenant vos chaînes) dans votre projet flexible. Exemple similaire: http://flexme.wordpress.com/2007/07/11/internationalization-in-flex/ – thelost

+0

ah, vous proposez à nouveau des fichiers de ressources. Malheureusement, les paires de valeurs clés ne m'aident pas, car je dois encore connaître le nom des touches sur flex et java :-). J'ai juste un tas de chaînes éparpillées, ce ne sont pas vraiment des valeurs de quelque chose que l'on peut appeler une clé. Mon point est, en ce moment j'ai des chaînes codées en dur. Si je fais des paires clé-valeur, j'ai des touches codées en dur et deux fois plus de chaînes, ce qui ajoute plus de carburant au feu, pour ainsi dire. Indirection n'est pas vraiment ce que je cherche ici. – gtrak

1

Ne pas à la fois Flex et Java ont tous deux le support des fichiers .properties simples où le contenu de ces fichiers sont de cette forme

key1=value 1 
key2=value 2 

et ainsi de suite ...

Alors pourquoi ne pas définir un fichier .properties commun et le partager entre vos deux projets? Votre système de contrôle de version pourrait également aider ici. Par exemple, si vous utilisiez svn, vous pouviez simplement placer vos fichiers .properties dans un autre référentiel et utiliser svn:externals pour les partager entre vos référentiels flex et java.

En ce qui concerne le chargement et en utilisant les propriétés, les pages suivantes montrent comment le faire dans chaque langue/plateforme:

Pour Java: http://www.mkyong.com/java/java-properties-file-examples/

Pour Flex: http://vatsalad.wordpress.com/2010/03/12/how-to-use-properties-fileresourcebundle-in-flex/

+1

il crée un peu le même problème, cependant, non? Cela résout le problème de synchronisation, mais maintenant je dois définir des constantes dans une autre classe et les charger à partir du fichier de propriétés. Je devrais encore connaître les noms des propriétés comme littéraux de chaîne codés en dur :-). – gtrak

+0

Oui, il résout le problème de synchronisation et obtient au moins les * valeurs * en un seul endroit. Du côté java, vous pouvez gérer la partie temps de compilation en l'évitant complètement avec quelque chose comme PropertyPlaceholderConfigurer de Spring et en utilisant IoC avec les classes qui ont besoin de ces valeurs.Je pense que Guice a quelque chose de similaire pour les propriétés. Cela obtient à peu près toutes les références au nom/aux valeurs de la propriété hors de votre code et dans la configuration et votre code devient ignorant qu'ils existent. En ce qui concerne Flex, vous devrez compter sur quelqu'un d'autre comme je le prétends Flex ignorance: D – whaley

Questions connexes