Vous devez mettre en œuvre une forme d'héritage, tout comme l'héritage dans les langages de programmation orientés objet ou CSS, dans lequel vous commencez avec un ensemble d'options communes, puis autorisez-le à être remplacé par d'autres options dans des ensembles plus spécifiques.
Vous établissez une hiérarchie d'ensembles d'options, en commençant par le haut avec des options communes à tous les utilisateurs, puis des ensembles d'options que vous avez identifiés comme communs à plusieurs types d'utilisateurs et enfin les options spécifiques à l'utilisateur. Cela doit être représenté comme un arbre dans votre fichier de configuration XML, en donnant à chaque ensemble d'options un nom et un parent. Au bas de l'arborescence se trouvent les ensembles d'options nommés d'après les types spécifiques d'utilisateurs (As, Bs, etc.).
Dans votre programme, vous devez lire ce fichier et assembler l'arbre en mémoire. Passez ensuite de haut en bas pour collecter les options et les ignorer au fur et à mesure. Lorsque vous atteignez les options spécifiques à l'utilisateur sur les feuilles de l'arbre et effectuez les dernières remplacements, vous avez terminé. Lorsque vous factorisez vos options, vous pouvez constater que certains ensembles doivent avoir plusieurs parents, car ils combinent les options de plusieurs ensembles. Si c'est le cas, votre arbre devient un DAG, et vous devez trier topologiquement avant de le traverser. Je réalise que c'est une solution complexe, mais je peux vous assurer que c'est la façon la plus flexible de gérer plusieurs configurations qui ont des éléments communs. Je l'ai implémenté avec succès afin de configurer plusieurs sites Web de commerce électronique qui utilisaient le même back-end.
Je peux voir cela fonctionner pour ajouter/modifier des options ou des sous-options, mais comment supprimer une option avec cette méthode? –
@Robert, vous pourriez avoir une valeur "non définie" à laquelle vous l'avez définie, ou avoir une autre étiquette à supprimer, plutôt que de définir une option. –