Реализовано в модулях Xafari и Xafari XF (Xafari.dll и Xafari.XF.dll).

Конечное приложение должно иметь возможность быть адаптировано под специфические нужды клиента. В общем случае, добавить или изменить требуется все: отчеты, функции, бизнес-процессы. Но больше всего проблем возникает при необходимости расширить модель данных. От эффективности решения этой задачи может зависеть эффективность работы приложения в целом, поскольку внесение изменений в модель данных влияет на структуру БД.

eXtensions Framework предоставляет эффективную методику проектирования модели данных и расширение модели данных. В основе лежит следующая концепция: конечное приложение состоит из бизнес-сущностей (Entity) в отличие от XAF, где приложение состоит из персистентных объектов. Каждая Сущность может быть расширена модульным Расширением (Entity Extension). Это позволяет обеспечить увеличение бизнес свойств Сущности в зависимости от состава модулей в конечном приложении.

Преимущества такого подхода описаны в статье Entity Factory. How to design complex systems? .

eXtensions Framework предоставляет всю инфраструктуру для такой работы (необходимые классы и методы).

eXtensions Framework используется только для бизнес-объектов, построенных на технологии Domain Components. Модель данных модуля состоит из Сущностей. Сущность это Domain Component, который регистрируется в репозитории сущностей. Модель Приложения автоматически модифицируется для использования Сущностей вместо персистентных объектов.

В списке Сущностей приложения каждая Сущность присутствует только один раз, не зависимо от того сколько имеется наследников у этой сущности.

Каждая сущность может быть расширена модульным Расширением (Entity Extension). Таким образом, через Расширения производится наращивание функционала.

Расширения Сущности являются примером горизонтального увеличения функционала. Расширенная Сущность является автоматически сгенерированным классом и включает в себя агрегированные ссылки на Расширения Сущности (см. рисунок)

Классы BaseClass1 и BaseClass2 являются абстрактными и реализованы в общем модуле, например Xafari.BC. Entity1 – Сущность, например из модуля Xafari.BC.CD. Ext1 и Ext2 это Расширения Сущности Entity1, реализованные в модулях прикладных систем. Здесь предполагается, что у заказчика необходимо использовать оба дополнительных модуля одновременно.

Классы NewEntity1, NewExt1, NewExt2 являются агрегирующими и существуют только в решении для конкретного заказчика или в составе определенной конфигурации. Эти классы генерируются автоматически при запуске приложения. При этом пользователь всегда работает только с одним типом бизнес-объекта, как показано на рисунке ниже. Остальные являются дополнительными по отношению к Class1.

Горизонтальная стратегия позволяет расширять бизнес-модель приложения практически без ограничений и получать модели различной сложность, например, такие как на рисунках ниже. Все это позволяет обеспечить увеличение бизнес-свойств сущности в зависимости от состава модулей в конечном приложении.

Модель расширенной бизнес-сущности приобретает следующий вид:

Здесь сущность Class1 расширена тремя расширениями в четырех дополнительных модулях. При этом каждое также расширяется в других модулях.

Работа с сущностями производится через Entity Factory, которая предоставляет набор аналогичных как у Object Space функций:

ObjectSpace.CreateEntity<>()

ObjectSpace.GetEntities<>()

ObjectSpace.SelectData()

И другие

Основы работы с eXtensions Framework описаны в разделе Learn More.