Одна Настройка соответсвует одному параметру системы. Настройка может иметь несколько значений в различных Слоях, об этом подробно написано в разделе Слои значений. Для описания набора Настроек используется подход, схожий с расширением Модели Приложения: необходимо расширить узел Application|Xafari|Settings необходимым набором интерфейсов. Для удобства использования в UI, Xafari BC Settings поддерживает многоуровневую группировку Настроек.

Настройки и группы декларируются с помощью специальных интерфейсов.

Настройки неперсистентного типа

Интерфейс Настройки неперсистентного типа T должен являться наследником Xafari.BC.Settings.IModelBCSettingsItem<T>.

 

    public interface IModelSettingEnum : IModelBCSettingsItem<SettingEnum>

    {

 

    }

 

Необходимо также реализовать класс Доменной логики, наследуясь от Xafari.BC.Settings.IModelBCSettingsItemLogic<T, TS>, где T-тип Настройки, а TS - интерфейс Настройки.

 

    [DomainLogic(typeof(IModelSettingEnum))]

    public class IModelSettingEnumLogic : IModelBCSettingsItemLogic<SettingEnumIModelSettingEnum>

    {

        public IModelSettingEnumLogic(IModelSettingEnum instance) : base(instance) { }

    }

 

После того, как Доменная логика реализована, Настройку можно выносить в Модель Приложения. Это описано ниже.

Xafari BC Settings предоставляет готовые интерфейсы для ряда распространенных стандартных типов, перечисленных в следующей таблице:

Built-in C# type

Setting Interface

bool

IModelKeyBool

bool?

IModelKeyBoolNull

int

IModelKeyInt

string

IModelKeyString

DateTime

IModelKeyDateTime

DateTime?

IModelKeyDateTimeNull

Guid

IModelKeyGuid

double

IModelKeyDouble

double?

IModelKeyDoubleNull

Настройки персистентного типа

Интерфейс Настройки персистентного типа PT должен являться наследником Xafari.BC.Settings.IModelBCSettingsObjectItem<PT>.

 

    public interface IModelKeyCategoryObject : IModelBCSettingsObjectItem<Category>

    {

 

    }

 

Необходимо также реализовать класс Доменной логики, наследуясь от Xafari.BC.Settings.IModelBCSettingsXPObjectItemLogic<PT, PTS>, где PT-тип Настройки, а PTS - интерфейс Настройки.

 

    [DomainLogic(typeof(IModelKeyCategoryObject))]

    public class IModelKeyCategoryObjectLogic : IModelBCSettingsXPObjectItemLogic<CategoryIModelKeyCategoryObject>

    {

        public IModelKeyCategoryObjectLogic(IModelKeyCategoryObject instance) : base(instance) { }

    }

 

После того, как Доменная логика реализована, Настройку можно объявить в интерфейсе группы. Это описано ниже.

Группы настроек

Группа Настроек декларируется интерфейсом, который является наследником Xafari.BC.Settings.IModelBCSettingsGroup. Группа может содержать ссылки на Настройки и на другие группы:

 

    public interface  Product : IModelBCSettingsGroup

    {

        IModelKeyCategoryObject Category { get; }

        IModelKeyString ShortName { get; }

    }

 

 

    public interface Classifiers : IModelBCSettingsGroup

    {

        Product Product { get; }

        Territory Territory { get; }

        Supplier Supplier { get; }

    }

 

    public interface IFeatureCenterSettings : IModelBCSettingsGroup

    {

        Group1 Group1 { get; }  

        IModelKeyString KeyString { get; }

        IModelKeyBool KeyBool { get; }

    }

    

 

Замечание:

После того как все необходимые Настройки определены и сгруппированы, необходимо объявить итоговый интерфейс, который обеспечивает доступ ко всей структуре Настроек и групп:

 

    public interface IModelNorthwindSettings

    {

 

        Documents Documents { get; }

        Classifiers Classifiers { get; }

    }

 

Добавьте этот интерфейс в узел IModelBCSettings Модели Прриложения:

 

    public override void ExtendModelInterfaces(DevExpress.ExpressApp.Model.ModelInterfaceExtenders extenders)

    {

        extenders.Add<IModelBCSettingsIModelNorthwindSettings>();

    }

 

Примеры проектирования Настроек и групп представлены в демо-приложениях Northwind и Feature Center, установленных вместе с Xafari: