Question

J'ai un « marque blanche » application installée sur plusieurs clients les serveurs. Sur toute installation compte tenu des différences comprendront le contenu, des feuilles de style et des graphiques, mais aussi un code réel / logique métier. Je veux que mon serveur TFS pour construire automatiquement toutes les saveurs de mon application. Quelles sont mes options pour ce faire? par exemple. dois-je utiliser Thèmes? Qu'en est-il #if drapeaux de compilation conditionnelle.

P.S. La question est sur la configuration du serveur Build -. Je l'ai fait déjà

Était-ce utile?

La solution

Pour la logique métier, je abstraire les différences dans une des bibliothèques distinctes, et vous pouvez utiliser un modèle de motif ou fournisseur IoC / DI pour résoudre la logique métier correcte lors de l'exécution.

En ce qui concerne le contenu que je regarderais en thèmes. Essentiellement, vous pourriez avoir votre serveur de build construire tout le code une fois, lorsque vous emballez le code que vous choisissez qui vous ENSEMBLES besoin et utiliser la configuration appropriée et choisissez le dossier thématique pour le client correspond le à portée de main.

Je n'aime pas utiliser # directives dans ce cas. Si vous y pensez à vos tests unitaires devraient fonctionner pour chaque condition que vous avez. Si vous supprimez les conditionals et les différences abstraites vos tests unitaires peuvent simplement fonctionner sur toutes les assemblées connectables à la fois.

Autres conseils

  1. Contenu / image - vous pouvez faire votre propre HtmlHelper / UrlHelper extension à faire Html \ Url.Content () pour pick-up bonnes choses pour les bons clients, en plus de copier les fichiers nécessaires à partir des dossiers de droite (ce qui est simple, / contenu + / ContentCustomer1, 2, ...).
  2. Il n'y a pas de réponse unique, je suppose. Une réponse facile serait de déplacer votre méthode Order.Calculate () à une classe partielle, de sorte que vous avez
    • OrderPartsForCustomer1.cs
    • OrderPartsForCustomer2.cs

où vous avez

public partial class Order
{
   public Money Calculate()
   {
   }
}

Vous aurez juste d'inclure les classes nécessaires .cs alors, et ne pas encombrer votre code avec #ifs.

Si vous voulez un code commun pour tous, et Dérogations seulement pour des clients spécifiques, vous pouvez avoir OrderPartsCommon.cs, que vous copier / utiliser s'il n'y a pas overide spécifique au client.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top