Je travaille actuellement sur un système hérité utilisant l'implémentation ADF Faces JSF d'Oracle pour la couche de présentation. Le système s'appuie sur un moteur de règles pour rendre certains éléments de formulaire obligatoires, désactivés ou même mis en surbrillance en fonction de l'interaction de l'utilisateur avec eux ou des valeurs entrées.Ajout de fonctionnalités: sous-classe vs décorateur
Au stade actuel, l'application fonctionne, en quelque sorte. La mise en œuvre actuelle manipulation du moteur de règles et les mises à jour de l'extrémité avant est pas très élégante et se compose d'un grand nombre de cas des déclarations similaires à:
if(screenObj instanceof CoreInputText) {
((CoreInputText) screenObj).setDisabled(true);
}
Pour compliquer le mélange, nous avons aussi nos propres objets mélangés dans de sorte que le mettre dans son ensemble ne partage pas un ancêtre commun éliminant ainsi notre possibilité de faire quelque chose comme:
((CommonAncestor) screenObj).setDisabled(true);
la question est de savoir si oui ou non il serait utile de retravailler cette partie du code pour être plus propre et plus claire. Étant donné que la majorité des éléments de l'écran sont des éléments Faces ADF, nous ne sommes pas en mesure/autorisés à modifier leur ascendance pour ajouter des méthodes supplémentaires. Le but du changement de code serait double: nettoyer le code ancien et améliorer la base de code de sorte que l'ajout de nouveaux éléments ou contrôles n'entraîne pas de changement de code important (en particulier pour les instructions if qui existent dans de nombreux endroits). Donc, si nous allons de l'avant avec ce changement, qui serait le meilleur choix pour atteindre ce que nous recherchons? Sous-classe de tous les éléments (nécessitant une nouvelle classe chaque fois que nous utilisons un autre contrôle préexistant) ou implémentation du motif décorateur? Ma seule préoccupation avec le décorateur est qu'il faudrait toujours un changement de code pour chaque élément supplémentaire. Les deux options semblent réduire les changements de code puisque plusieurs méthodes contenant ces blocs if n'ont pas besoin d'être mises à jour. Toute contribution sur les méthodes pour gérer de telles situations au-delà de la sous-classification et des décorateurs est la bienvenue!
Je suis désolé d'avoir mentionné cela. Non, ils n'ont pas de méthode commune. J'espérais également ajouter de nouvelles méthodes aux deux; quelque chose comme highlight (booléen) qui définirait juste un certain nombre de propriétés. – doomspork