Введение

При проектировании прикладных систем иногда возникает необходимость создавать собственные специализированные хранилища различий Модели Приложения (Application Model Differences) или пользовательских различий модели (User Model Differences). Для решения таких задач DevExpress XAF предоставляет 2 события класса XafApplication:

В процессе использования указанных событий возникает ряд проблем:

Также реализация хранилища по умолчанию не выполняет разделение User Model Differences для различных пользователей системы.

Для решения указанных проблем, а также расширения функций хранилищ Model Differences было реализовано описанное решение.

Применение

Описываемый механизм используется в платформе XAFARI по умолчанию.

Инфраструктура управления хранилищами реализована в сборке Xafari.dll (см. Руководство разработчика).

Модуль XafariWinModule (находится в сборке Xafari.Win.dll), который предназначен для работы в приложениях Windows Forms, инициализирует систему управления хранилищами изменений модели на использование файлового хранилища. С этой целью в методе Setup класса XafariWinModule создается экземпляр фабрики FileUserModelDifferenceStoreFactory:

 

ModelDifferenceStoreManager.Instance.ModelDifferenceStoreFactory = new FileUserModelDifferenceStoreFactory(modelDifferenceFilePath, userModelDifferenceFilePath);

 

С этого момента в приложении используется хранилище FileUserModelDifferenceStore. В отличие от реализации DevExpress, данное хранилище сохраняет различия модели пользователя индивидуально для каждого пользователя, кроме того, позволяет вводить дополнительные уровни при хранени различий модели (контексты). Например, механизм управления Рабочими местами расширяет контекст сегментом «Рабочее место». При этом различия модели хранятся раздельно для каждого рабочего места и каждого пользователя.

 

Модуль XafariWebModule (находится в сборке Xafari.Web.dll), который предназначен для работы в приложениях ASP.NET, инициализирует систему управления хранилищами изменений модели на использование хранилища в cookies браузера. С этой целью в методе Setup класса XafariWebModule создается экземпляр фабрики SessionUserModelDifferenceStoreFactory:

 

ModelDifferenceStoreManager.Instance.ModelDifferenceStoreFactory = new SessionUserModelDifferenceStoreFactory();

 

С этого момента в приложении используется хранилище SessionUserModelDifferenceStore, которое работает аналогично вышеописанному FileUserModelDifferenceStore.

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