2010-12-07 4 views
3

Je travaille sur une application qui est produite pour différents groupes de clients. Selon le client, les éléments de l'interface utilisateur du logiciel peuvent varier. Par exemple, un client peut avoir besoin de l'élément de menu X, tandis que l'autre client reçoit l'élément de menu Y.Stratégie de branchement pour logiciel configurable

Actuellement, toute la configuration de l'interface utilisateur se fait via XML (en grande partie avec le ressort). Pour les différents exemples d'options de menu, un fichier XML peut avoir une liste d'options de menu à afficher sur l'interface utilisateur. J'essaie de comprendre comment gérer au mieux le branchement du logiciel de sorte qu'ils puissent tous utiliser la même base de référence, et tous reçoivent des corrections de bogues, mises à jour, etc. La seule chose qui sera différente entre le branches est les fichiers de configuration XML.

Existe-t-il de bonnes pratiques/techniques pour gérer cela? Je ne suis pas tout à fait sûr que chaque client a besoin de différentes branches - c'était juste ma première pensée, donc je suis ouvert à d'autres suggestions. Mais toute aide concernant la meilleure façon de procéder serait appréciée.

Si elle aide à savoir, nous ne sommes pas en utilisant un système de contrôle de version distribué pour ce projet (en utilisant SVN).

grâce,

Jeff

Répondre

3

Si vous pouvez le gérer, je vous conseille vivement contre une branche par client. Pensez simplement aux frais généraux de fusion, multipliés par le nombre normal de branches que vous pourriez avoir pour d'autres raisons, telles que la correction après la publication.

Si vous pouvez plutôt tenir à l'approche de configuration - caractéristiques pour allumer et éteindre sans recompilation - Je pense que vous constaterez que pour maintenir une approche beaucoup plus facile.

+0

@Ed, que pensez-vous des endroits où conserver les fichiers de configuration? Tous les fichiers clients dans un seul projet, comme suggéré par @mouviciel? Ou d'une autre manière? –

3

Dans le coffre, je maintiendrais plusieurs fichiers de configuration, du nom du client. Lors de la préparation d'une livraison, je ne copierais que le fichier de configuration pertinent, renommé comme prévu par le logiciel.

+0

Je pense que vous avez raison d'avoir plusieurs fichiers de configuration serait probablement le plus facile. Cependant, il semble quelque peu incorrect d'avoir tous les différents fichiers de configuration client dans un projet. Mais cela pourrait toujours être le moyen le plus facile. –

+0

Pour moi, ces configurations client ne sont pas différentes versions du même fichier, ce sont des fichiers différents. Chacun de ces fichiers peut avoir plusieurs versions en fonction de l'évolution des besoins de chaque client. – mouviciel

+0

Merci, appréciez votre réponse. –

2

Si la seule chose qui sera vraiment différent entre les clients sont les fichiers de configuration XML, alors je ne crée pas une branche de code complet pour chaque client. C'est une application de DRY - si vous avez le code répété à deux endroits, il deviendra désynchronisé.

Dans ce cas, vous pouvez simplement garder tous les fichiers de configuration dans des branches distinctes, ou d'utiliser un fichier de base et de configuration d'overrides offre par client. Ensuite, vous auriez juste besoin de faire un processus de construction qui pourrait tout mettre ensemble pour un client donné.

Tout subjective Je sais, mais voilà comment j'aborder le problème.

+0

Je penche vers une configuration de base avec des remplacements par client. Je suppose que je pourrais stocker ceux dans les différentes branches, mais je ne pense pas que ce soit vraiment ce à quoi une branche est destinée. Mais, j'aime bien l'idée de séparer les fichiers de configuration spécifiques au client de la branche principale.J'essaie juste de trouver une façon propre de le faire. Peut-être avoir des dossiers séparés et ensuite utiliser le script de construction pour choisir ceux qui sont nécessaires. –