Содержание

Xafari.ModelDifferenceStoreManager

Контроль над созданием хранилищ Model Differences возложен на класс Xafari.ModelDifferenceStoreManager, который реализован как singleton. Доступ к экземпляру менеджера осуществляется через его статическое свойство Instance.

Свойство класса ModelDifferenceStoreFactory позволяет получить доступ к текущей фабрике хранилищ Model Differences, либо для задания собственного экземпляра фабрики.

При установке нового экземпляра фабрики хранилищ менеджер генерирует два события: BeforeChangeModelDifferenceStoreFactory и AfterChangeModelDifferenceStoreFactory. Эти события позволяют прикладному коду отслеживать моменты смены фабрики хранилищ Model Differences. Обработчики данных событий могут быть использованы, например, для отписки/подписки на обработку событий, генерируемых фабрикой.

Xafari.ModelDifferenceStoreFactory

Абстрактный класс Xafari.ModelDifferenceStoreFactory является базовым для пользовательских фабрик.

Методы CreateModelDifferenceStore() и CreateUserModelDifferenceStore() создают и возвращают экземпляры хранилища (для Model Differences и User Model Differences соответственно. При создании экземпляра хранилища фабрика генерирует события CustomizeModelDifferenceSoreParams или CustomizeUserModelDifferenceSoreParams, в обработчике которого можно управлять параметрами создаваемого экземпляра хранилища.

При реализации собственной фабрики в наследнике класса ModelDifferenceStoreFactory необходимо переопределить один или оба защищенных виртуальных метода CreateModelDifferenceStoreCore(ModelDifferenceStoreParamsEventArgs), CreateUserModelDifferenceStoreCore(ModelDifferenceStoreParamsEventArgs), принимающих в качестве параметра экземпляр класса ModelDifferenceStoreParamsEventArgs, содержащий параметры инициализации создаваемого хранилища.

Переопределенный метод должен создать и вернуть созданный экземпляр хранилища для Model Differences (экземпляр класса, унаследованного от абстрактного класса DevExpress.ExpressApp .ModelDifferenceStore). Если переопределенный метод возвращает null, то при создании хранилища будет создано хранилище по умолчанию, определяемое классами WinApplication или WebApplication.

Xafari. ModelDifferenceStoreParamsEventArgs

ModelDifferenceStoreParamsEventArgs класс представляет параметр событий CustomizeModelDifferenceStoreParams и CustomizeUserModelDifferenceStoreParams, генерируемых фабрикой хранилищ.

Открытый метод класса AddContext(string) позволяет прикладному коду расширять контекст дополнительными сегментами. Сформированный в результате контекст используется для поиска нужных Model Differences.

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

Это поле в последствии используется при чтении/записи Model Differences. Это дает возможность, например, для одного пользователя системы использовать несколько различных независимых User Model Differences, когда это необходимо.

Xafari.FileUserModelDifferenceStoreFactory, Xafari.FileUserModelDifferenceStore

Классы фабрики хранилищ и самого хранилища для User Model Differences, используемые в Windows версии приложения XAFARI по умолчанию (фабрика FileUserModelDifferenceStoreFactory подключается к менеджеру ModelDifferenceStoreManager в модуле Xafari.Win).

В отличие от используемого по умолчанию в XAF FileModelStore, класс FileUserModelDifferenceStore осуществляет раздельное для каждого пользователя хранение пользовательских изменений модели в виде XML файлов  вида "Model.User.<USER_NAME>[.<CONTEXT_ID>][_aspect].xafml", где:

<USER_NAME> - имя текущего пользователя приложения;

<CONTEXT_ID> - значение поля ModelDifferenceStoreParamsEventArgs.ContextId  (если значение не задавалось в прикладном коде, то это поле отсутствует в имени файла).

Xafari.Web.SessionUserModelDifferenceStoreFactory, Xafari.Web.SessionUserModelDifferenceStore

Классы фабрики хранилищ и самого хранилища для User Model Differences, используемые в ASP.NET версии приложения Xafari по умолчанию (фабрика SessionUserModelDifferenceStoreFactory подключается к менеджеру ModelDifferenceStoreManager в модуле Xafari.Web).

SessionUserModelDifferenceStore осуществляет раздельное для каждого пользователя хранение пользовательских изменений модели в cookies браузера.

В отличие от используемого по умолчанию SessionModelDifferenceStore, данное хранилище сохраняет User Model Differences отдельно по каждому пользователю и значению поля ModelDifferenceStoreParamsEventArgs.ContextId, если оно было задано в прикладном коде.