Модульность
Модульность - это когда мы разделяем модель приложения и исходные коды на модули на этапе проектирования. Конечное приложение может быть собрано как в варианте монолита, так и микросервиса. Ключевое преимущество такого модульного проектирования заключается в следующих пунктах:
- Возможность собрать конечное приложение только из необходимых модулей
- Возможность небольшого переопределения готового базового модуля
- Относительно независимая разработка модулей
Flexberry Designer имеет функции для модульного проектирования.
Алгоритм действий
- Экспортировать стадию которая реализована как модуль.
- Упаковать стадию в NuGet-пакет.
- Добавления NuGet-пакета с метаданными в проект.
- Создать классы, с помощью связи реализации взяв за основу классы из NuGet-пакета с модулем.
Упаковать стадию в NuGet-пакет
Упаковка стадии в нугет делается в ручную с помощью nuget.exe
- Надо создать nuspec файл, указал в нем экспортированную стадию
<file src="security.crp" target="content" />
. - Упаковать в nupkg командой
nuget pack my.nuspec
. - Выложить пакет в NuGet Gallery.
Добавления NuGet-пакета с метаданными в проект
Flexberry Designer есть возможность добавить метаданные из NuGet-пакета, для этого надо на диаграмме добавить новый класс с именем пакета (например: NewPlatform.Flexberry.SecurityModel@1.0.0
) и версии со стереотипом nugetreference
и сохранить диаграмму. В результате в стадии появится новая система с диаграммами из пакета. У классов из системы будут новые стереотипы:
- «nugetimplementation» - класс из NuGet-пакета.
- «nugetenumeration» - перечисление из NuGet-пакета.
- «nugetinterface» - интерфейс из NuGet-пакета
- «nugeteditform» - форма редактирования из NuGet-пакета.
- «nugetlistform» - форма списковая из NuGet-пакета.
Классы с типами не меняются.
Имена классов будут изменены (добавлен префикс пакета) чтобы избежать дублей, но на генерацию это не повлеяет.
Связь реализация
Реализация – это семантическая связь между классами, когда один из них (поставщик) определяет соглашение, которого второй (клиент) обязан придерживаться. Это связи между интерфейсами и классами, которые реализуют эти интерфейсы. Это, своего рода, отношение «целое-часть». Поставщик, как правило, представлен абстрактным классом.
Простым языком, эта связь добавляет в класс потомка свойства из родителя, но без наследования. Потомок не будет наследоваться от предка, но внутри него самого будут все атрибуты и методы предка.
Модульное проектирование
Дизайнер позволяет используя связи реализации и NuGet-пакет с метаданными:
- спроектировать модель
- создать представления
- сгенерировать объекты для бекенда
- сгенерировать sql скрипты
Пример использования
Допустим, у нас есть стадия в nuget-е NewPlatform.Flexberry.SecurityModel
и мы хотим использовать ее у себя в проекте, потому что нам потребуются те же классы, но с дополнительными полями.
Для этого надо в стадии с проектом создать класс NewPlatform.Flexberry.SecurityModel
со стереотипом «nugetreference»
и указать в нем версию пакета (если версию не указывать, то берется последняя версия) и сохранить диаграмму.
После этого, у стадии появится новая система с объектами из nuget-а (надо обновить узел дерева кнопкой обновить)
Теперь проектируя систему можно, делать реализацию от классов из NewPlatform.Flexberry.SecurityModel
Сгенерируя данную модель, класс ICSSoftSTORMNETSecurity_Filter
со стереотипом nugetimplementation
(из nuget-а) не сгенерируется, сгенерируется только класс NewTest
с полями из класса ICSSoftSTORMNETSecurity_Filter
Таким образом, можно использовать свойства класса ICSSoftSTORMNETSecurity_Filter
в классе NewTest
без наследования и необходимости наличия в системе ICSSoftSTORMNETSecurity_Filter