Расширенная поддержка модульности при проектировании приложений #14
bratchikov
started this conversation in
Ideas
Replies: 4 comments 2 replies
-
Beta Was this translation helpful? Give feedback.
2 replies
-
Также возникла пара вопросов:
|
Beta Was this translation helpful? Give feedback.
0 replies
-
от классов с какими стереотипами можно делать реализацию? (сейчас только от implementation и Interface) |
Beta Was this translation helpful? Give feedback.
0 replies
-
Оставшийся фидбэк:
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Что подразумевается под модульностью в данном контексте
Для начала разберёмся что подразумевается под модульностью в приложениях.
Варианты модульности в Run-Time (архитектура во время исполнения программы):
Варианты модульности в Design-Time (архитектура исходных кодов на этапе проектирования):
Таким образом, данное обсуждение касается варианта, когда мы разделяем модель приложения и исходные коды на модули на этапе проектирования. Конечное приложение может быть собрано как в варианте монолита, так и микросервиса.
Ключевое преимущество такого модульного проектирования заключается в следующих пунктах:
Проблемы при проектировании с модульным подходом
Flexberry предлагает несколько возможностей для организации модульного проектирования:
Тем не менее, данные возможности несут в себе дополнительные издержки. Например, в случае использования external-классов из соседних проектов мы получаем жёсткую связку множества проектов без возможности упраления версионированием и обновлением по частям.
Наследование тоже имеет ряд неприятных моментов, несмотря на логичное применение при расширении атрибутивного состава:
Предложение
Для преодоления проблем с наследованием, нам нужен новый тип связи в UML-редакторе:
Реализация
. Данный тип связи должен работать следующим образом: в реализующий класс явно переносятся все атрибуты, мастера, детейлы и представления базового класса.Для ассоциаций надо «разрубить» концепцию
TypeUsage
для классов со связямиРеализация
. Не должно генерироваться несколько ссылок на таблицы вида _m0, _m1 и т.д.. Связь должна быть в одном экземпляре.Предлагается использовать отдельные NuGet-пакеты для сохранения UML-метаданных проекта и публикации их в NuGet-галерею с понятной моделью версионирования. На диаграмме добавить класс со стереотипом NuGet, который будет принимать имя и версию вида «NewPlatform.Flexberry.SystemFive@4.0.11». Все метаданные данного пакета должны стать доступны для проектирования. При переустановке версии – должны удалиться прежние метаданные и добавиться новые. Надо подумать как бороться с пересечением имён. Проверять валидность моделей при переустановке пакетов.
Может быть, имеет смысл добавить отдельный стереотип для классов из пакета или даже добавить диаграммы из пакета, пометив их каким-то образом.
При упаковке модели в пакет нужно генерировать полное описание (брать из метаданных класса, описывающего этот пакет).
Подумать над вариантом, когда из одной стадии мы можем получить несколько NuGet-пакетов с метаданными. Таким образом надо размечать какие метаданные к какому пакету относятся (свойство Packet). Пакеты могут быть зависимыми друг от друга.
При добавлении на диаграмму ссылки на NuGet-пакет с моделью надо предоставить возможность быстрого добавления на диаграмму классов из этого пакета. При добавлении класса из пакета автоматически добавлять его атрибуты, мастера, детейлы и наследование от интерфейсов (интерфейсы помечаем как externalintarface, к ним должны быть привязаны бизнес-сервера).
Новые стереотипы:
Новые связи:
Realization
– аналогична наследованию, но без реального наследования просто копируется атрибутивный состав и методы класса. Ближе всего это похоже на прототипное наследование.Пример модели с модульностью
Call to action
Данное изменение в платформе имеет заметные вложения трудозатрат, поэтому требуется хорошее обоснование их востребованности. Большая просьба прокомментировать данное предложение, отметить слабые и сильные стороны. Вопросы по конкретным кейсам также крайне приветствуются. Давайте вместе создадим супер инструмент будущего. Наша команда очень ждёт ваших действий.
Beta Was this translation helpful? Give feedback.
All reactions