Я работал над приложениями с сервисными уровнями. Хотя это может быть не самый лучший способ, вот как я это видел.
1) Выясните, какие функции являются общими для всех уровней. Общие функции не нуждаются в какой-либо логике для них, поскольку они доступны для всех.
2) Характеристики, которые не являются общими, должны быть разбиты гранулированным способом. поэтому их можно включить/отключить по одному за раз.
3) Назначьте матрицу признаков уровням.
У нас было лицензионное приложение, которое было в основном пакетом флажков всех подробных функций. Выбор «Lite» будет проверять соответствующие поля, поэтому, когда код лицензии был сгенерирован, он будет включать эти функции.
При запуске сервер лицензий был надежно запрошен. (Это было серверное приложение, поэтому он не запускался/останавливался очень часто, а интернет был гарантирован). Список разрешенных функций будет возвращен в приложение.
В коде, который вы только что указали, функция погоды включена, и пусть сервер лицензирования определяет, на каком уровне пользователь включен.
Другой способ, который я видел в компьютерных играх для демонстрационных дисков, - иметь цель компиляции для каждого уровня.
#DEFINE TIER_NORMAL 1
#DEFINE TIER_LITE etc.
then
#ifdef TIER_NORMAL
do tier normal stuff
#endif
Обратите внимание, что вам необходимо отслеживать 3 разных бинарных файла, что может быть больно. Но у вас нет кода, на который пользователь не платил. Может быть проще в меньшем проекте, чем получить лицензионный сервер.
Вот что я понял, спасибо за ответ. – JGeiser 2008-12-08 21:16:48