Creatio development guide
Это документация Creatio версии 7.11.0. Мы рекомендуем использовать новую версию документации.

Механизм отключения функциональности Feature Toggle

Glossary Item Box

Общие сведения

Feature toggle — техника разработки программных продуктов, которая обеспечивает поддержку подключения дополнительной функциональности в работающем приложении. Это позволяет использовать непрерывную интеграцию, сохраняя работоспособность приложения и скрывая функциональность, которая находится в стадии разработки.

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

Хранение сведений о функциональности в базе данных

Перечень доступной для включения/отключения функциональности хранится в таблице Feature базы данных приложения. По умолчанию таблица пуста. Основные поля таблицы Feature приведены в таблице 1.

Табл. 1. — Основные поля таблицы Feature

Название Тип Описание
Id uniqueidentifier Уникальный идентификатор записи.
Name varchar( 250 ) Название функциональности.
Code varchar( 50 ) Код функциональности.

Информация о состоянии функциональности (включена/отключена) содержится в поле FeatureState таблицы AdminUnitFeatureState (рис.1). Таблица AdminUnitFeatureState связывает таблицы Feature и SysAdminUnit, в которой определены пользователи и группы пользователей системы. Основные поля таблицы AdminUnitFeatureState приведены в таблице 2.

Табл. 2. — Основные поля таблицы AdminUnitFeatureState

Название Тип Описание
Id uniqueidentifier Уникальный идентификатор записи.
FeatureId uniqueidentifier Уникальный идентификатор записи функциональности.
SysAdminUnitId uniqueidentifier Уникальный идентификатор записи пользователя.
FeatureState int Состояние функциональности. 1 — включена, 0 — выключена.

Рис. 1. — Диаграмма взаимосвязи таблиц

Определение новой функциональности в программном коде

Для внедрения дополнительной функциональности в исходный код ее необходимо определять в блоке условного оператора, который проверяет состояние подключения функциональности FeatureState.

JavaScript на стороне клиента

Условный шаблон определения дополнительной функциональности в программном коде:

// Метод, в котором определяется дополнительная функциональность.
someMethod: function() {
    // Проверка подключения функциональности.
    if (Terrasoft.Features.getIsEnabled("код функциональности")) {
        // Реализация дополнительной функциональности.
        ...
    }
    // Реализация метода.
    ...
}

Для повышения удобства использования в состав базовой схемы модели представления BaseSchemaViewModel введен метод getIsFeatureEnabled. Поэтому метод Terrasoft.Features.getIsEnabled можно заменить на this.getIsFeatureEnabled("код функциональности").

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

C# на стороне сервера

Для использования Feature toggle в схемах исходного кода на серверной стороне в классе Terrasoft.Configuration.FeatureUtilities был реализован набор расширяющих методов класса UserConnection. Перечень расширяющих методов приведен в таблице 3. В этом же классе объявлено перечисление состояний функциональностей FeatureState.

Табл. 2. — Основные методы класса DataManager

Метод Параметры Описание
int GetFeatureState( this UserConnection source, string code )

code — код функциональности.

Возвращает состояние функциональности.
Dictionary <string, int> GetFeatureStates( this UserConnection source ) Нет. Возвращает состояния всех функциональностей.
void SetFeatureState( this UserConnection userConnection, string code, int state, bool forAllUsers = false )

code — код функциональности;

state — состояние функциональности (0/1);

forAllUsers — признак установки функциональности для всех пользователей.

Устанавливает состояние функциональности.
void CreateFeature( this UserConnection source, string code, string name, string description )

code — код функциональности;

name — название функциональности;

description — описание функциональности.

Создает новую функуциональность.
bool GetIsFeatureEnabled( this UserConnection source, string code )

code — код функциональности.

Проверяет подключена ли функциональность.

Условный шаблон определения дополнительной функциональности в программном коде:

// Пространство имен, в котором определена возможность переключения 
// дополнительной функциональности.
using Terrasoft.Configuration;
…
// Метод, в котором будет определяться дополнительная функциональность.
public void AnyMethod() {
    // Проверка, включена ли функциональность.
    if (UserConnection.GetIsFeatureEnabled("код функциональности")) {
        // Реализация дополнительной функциональности.
    }
    // Реализация метода.
    ...
}

Установка значения состояния функциональности выполняется вызовом метода SetFeatureState:

UserConnection.SetFeatureState("код функциональности", FeatureState);

© Terrasoft 2002-2018.

Был ли данный материал полезен?

Как можно улучшить эту статью?