2010-02-10 4 views
2

Comment, à votre avis, devrions-nous coder pour gérer l'activation ou la désactivation des fonctions en fonction du type d'installation. Le but est d'avoir une seule installation pour des éditions séparées et de rendre les fonctionnalités disponibles en fonction du type d'installation. Une façon de le faire est de compiler le code sous condition, mais cela rend le code sale et difficile à maintenir.Activer/désactiver les fonctionnalités en fonction du type d'installation

Répondre

3

Vous pouvez recourir à l'architecture basée sur les plug-ins, où toutes (ou la plupart) des fonctionnalités sont implémentées en tant que plugins qui étendent les fonctionnalités de l'application principale. De cette façon, vos éditions ne différeront que dans quels assemblages sont installés/livrés/etc. Accordé, avec cette approche, vous pouvez toujours faire une édition "Starter" pour devenir "Professionnel" en copiant simplement les assemblages manquants. Pour résoudre ce problème, vous devrez toujours recourir à la compilation conditionnelle, mais vous devrez compiler sous conditions les blocs chargés de charger ces plugins. Par exemple, supposons, pour votre édition professionnelle, que vous souhaitiez ajouter, par exemple, exporter des fonctionnalités. À cette fin, vous créez une interface de plug-in IExporter distincte. Voici comment vous gérez ceci:

public IExporter GetExporter(FormatType format) 
{ 
#if PROFESSIONAL_EDITION 
    return ExporterRegistry.GetExporter(format); 
#else 
    return NullExporter(); 
#endif   
} 

Ainsi, votre édition professionnelle aura une capacité à être étendue à la coutume IExporter s, alors que les éditions non professionnels, même avec toutes les assemblées « professionnels » en place, ne sera pas capable de faire usage de cette fonctionnalité.

0

Les drapeaux seraient une option, mais je suppose que ce serait «compilation conditionnelle». Le type d'installation définirait un drapeau, basé sur les drapeaux, du code serait exécuté sinon il serait ignoré.

Pouvez-vous avoir différentes branches du code? De cette façon, chaque version aurait seulement le code approprié pour ce type d'installation. Pas besoin de transporter du code qui ne sera jamais utilisé.

+0

"Branches" rendra difficile à maintenir à mesure que le nombre d'éditions augmente. – Faisal