Реализованные функции, для модульности

Модульность

Модульность - это когда мы разделяем модель приложения и исходные коды на модули на этапе проектирования. Конечное приложение может быть собрано как в варианте монолита, так и микросервиса. Ключевое преимущество такого модульного проектирования заключается в следующих пунктах:

  • Возможность собрать конечное приложение только из необходимых модулей
  • Возможность небольшого переопределения готового базового модуля
  • Относительно независимая разработка модулей

Flexberry Designer имеет функции для модульного проектирования.

Алгоритм действий

  1. Экспортировать стадию которая реализована как модуль.
  2. Упаковать стадию в NuGet-пакет.
  3. Добавления NuGet-пакета с метаданными в проект.
  4. Создать классы, с помощью связи реализации взяв за основу классы из NuGet-пакета с модулем.

Упаковать стадию в NuGet-пакет

Упаковка стадии в нугет делается в ручную с помощью nuget.exe

  1. Надо создать nuspec файл, указал в нем экспортированную стадию <file src="security.crp" target="content" />.
  2. Упаковать в nupkg командой nuget pack my.nuspec.
  3. Выложить пакет в 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