Включить / отключить функции в зависимости от типа установки - PullRequest
2 голосов
/ 10 февраля 2010

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

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

Ответы [ 3 ]

3 голосов
/ 10 февраля 2010

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

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

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

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

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

2 голосов
/ 10 февраля 2010

Вы можете использовать условную компиляцию или ConditionalAttribute. Вот статья, объясняющая эти темы: Создание и поддержка нескольких выпусков приложений с использованием условной компиляции

0 голосов
/ 10 февраля 2010

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

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

...