2010-02-10 2 views
2

Как, на ваш взгляд, мы должны кодировать для управления включением или отключением функций на основе типа установки. Цель состоит в том, чтобы иметь отдельную установку для отдельных изданий и создавать функции на основе типа установки.Включить/отключить функции на основе типа установки

Один из способов сделать это - условно скомпилировать код, но это делает код грязным и трудным в обслуживании.

ответ

3

Вы можете прибегнуть к архитектуре с плагинами, где все (или большинство) функций реализованы в виде плагинов, расширяющих функциональность основного приложения. Таким образом, ваши издания будут отличаться только тем, какие сборки устанавливаются/отправляются/и т. Д.

Конечно, при таком подходе вы всегда можете сделать выпуск «Стартер», чтобы превратиться в «Профессионал», просто скопировав отсутствующие сборки. Чтобы решить эту проблему, вам все равно придется прибегать к условной компиляции, но вам придется условно компилировать блоки, которые несут ответственность за загрузку этих плагинов.

Например, для вашего профессионального издания вы хотите добавить, скажем, функцию экспорта. С этой целью вы создаете отдельный интерфейс плагина IExporter. Вот как вы справиться с этим:

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

Таким образом, ваше профессиональное издание будет иметь возможность быть продлен с пользовательскими IExporter с, в то время как непрофессиональных изданий, даже со всеми сборками «Профессионал» в месте, не будет в состоянии использовать эту функциональность.

0

Флаги были бы одним из вариантов, но я предполагаю, что это будет «условная компиляция». Тип установки установил бы флаг на основе флагов, какой-то код выполнил бы иначе, иначе он будет проигнорирован.

У вас есть разные ветви кода? Таким образом, каждая версия будет иметь только соответствующий код для этого типа установки. Не нужно носить с собой код, который никогда не будет использоваться.

+0

«Ветви» затруднят поддержание по мере увеличения количества выпусков. – Faisal