Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CUBA Platform 7 Meetup

CUBA Platform 7 Meetup

Yuriy Artamonov

February 14, 2019
Tweet

More Decks by Yuriy Artamonov

Other Decks in Technology

Transcript

  1. 2 Мотивация изменений ⊷ Улучшение эргономики инструментов ⊷ Повышение гибкости

    фреймворка ⊷ Появление API ⊷ Упрощение подходов ⊷ Фундамент для развития экосистемы ⊷ С сохранением обратной совместимости
  2. План 1. CUBA Studio 2. OSS Add-ons 3. Screen API

    4. Event Handling 5. Functional Interfaces 6. Actions 7. Typed UI Components 8. URL Routing 9. Data Components 10. Compatibility Layer 11. New UI Components 12. Разное 3
  3. Основные проблемы ⊷ Studio 6.x - отдельное приложение ⊷ Невозможность

    работы с кодом ⊷ Собственный парсер Java / Groovy ⊶ Сложно поддержать языки отличные от Java (Kotlin) ⊶ Ограниченный hot deploy 5
  4. Варианты ⊷ IntelliJ IDEA Plugin ⊷ Standalone IDE Функциональность -

    одинаковая! https://cuba-platform.com/download Новый плагин CUBA заменяет старый, но включает всю его функциональность 6
  5. Open Source Add-ons ⊷ Charts, Reports, FTS, BPM, BI ⊷

    Apache License 2.0 ⊷ Только для версий 7.0+ ⊷ GitHub repository & issues Принимаем Pull Requests! 12
  6. ⊷ Непрозрачность - многое скрыто в недрах предков экранов ⊷

    Отсутствие API - жёсткая типовая функциональность ⊷ Реактивное развитие - фичи появляются стихийно в ответ на внешние раздражители Основные проблемы 15
  7. Screen Life Cycle События: ⊷ Init ⊷ AfterInit ⊷ BeforeShow

    ⊷ AfterShow ⊷ BeforeClose ⊷ AfterClose 17
  8. Прикладные интерфейсы ⊷ Notifications - нотификации ⊷ Dialogs - стандартные

    диалоги ⊷ Screens / ScreenBuilders - открытие окон ⊷ MessageBundle - пакет сообщений экрана 19
  9. Actions Идеология: ⊷ Action позволяет вызвать функциональность, ⊷ Служит мостиком

    между бинами и UI компонентами, ⊷ Не содержит полезного кода, только делегирует исполнение. Нововведения: ⊷ @ActionType ⊷ Делегация вместо наследования классов действий 22
  10. URL Routing - CRUD ⊷ @Route ⊷ StandardEditor поддерживает открытие

    по ID http://host:port/app/#main/42/orders/edit?id=17 25
  11. URL Routing - Custom ⊷ UrlRouting - API для управления

    состоянием ⊷ UrlParamsChangedEvent - событие изменения URL в браузере 26
  12. ⊷ Datasource - монолитный, громоздкий и плохо- адаптируемый механизм ⊷

    Ненадежное отслеживание изменений - сохраняется только то, что лежит в datasource Основные проблемы 28
  13. 29 Data Components Container Хранит и предоставляет данные UI компонентам.

    Loader Декларативный механизм загрузки данных для контейнеров. Data Context Отслеживает и сохраняет изменения в графах сущностей. DataComponents фабрика компонентов данных.
  14. Контейнеры ⊷ InstanceContainer ⊶ setItem() / getItem() ⊷ CollectionContainer extends

    InstanceContainer ⊶ setItems() / getItems() / getMutableItems() ⊶ replaceItem() / getItemIndex(entityId) / getItem(entityId) / setSorter() ⊷ CollectionPropertyContainer extends CollectionContainer ⊶ setDisconnectedItems() / getDisconnectedItems() 30
  15. ⊷ EntityChangedEvent ⊶ Содержит id измененной сущности ⊶ Содержит старые

    значения локальных атрибутов и старые id ссылок ⊶ Может быть обработан внутри транзакции или после коммита ⊶ Требует наличия аннотации @PublishEntityChangedEvents ⊷ TransactionalDataManager ⊶ Выполняет действия в контексте активной транзакции или стартует новую ⊶ Принимает и возвращает detached сущности, явно сохраняет в БД ⊶ Применяет security и все остальное ⊷ Работают JPA lifecycle callbacks ⊶ @PrePersist, @PreUpdate, etc. Изменения в API среднего слоя 39
  16. Совместимость экранов UI Реализован слой совместимости: ⊷ AbstractWindow extends Screen

    ⊷ WebScreens implements WindowManager Источники данных: ⊷ Screen - data components ⊷ AbstractWindow / AbstractFrame - datasources 41
  17. Совместимость UI компонентов Биндинг данных для UI компонентов выполяется при

    помощи адаптеров, e.g. DatasourceTableItems. ⊷ Table.setDatasource -> setItems(Items) ⊷ Field.setDatasource -> setValueSource(ValueSource) ⊷ OptionsField.setOptionsDatasource -> setOptions(Options) 42
  18. ⊷ Использование FieldGroup не type safe ⊷ Магия усложняет жизнь

    инструментам ⊷ Сложная интеграция JavaScript компонентов Основные проблемы 44
  19. Form ⊷ Контейнер для UI компонентов ⊷ Легковесная замена FieldGroup

    ⊷ Все компоненты определяются в design-time 45
  20. JavaScriptComponent Простейший способ интеграции JavaScript виджетов без создания UI компонентов

    на Vaadin. Минимальный вариант использования: ⊷ POJO состояния ⊷ JavaScript файл 47
  21. Inline HTML / CSS attributes HtmlAttributes ⊷ CSS атрибуты (XML,

    API) ⊷ DOM атрибуты (API) Применение: ⊷ Простейшие манипуляции CSS ⊷ Компоновка при помощи CSS Flex / Grid в CssLayout Ограничение: только для верхнего DOM элемента в UI компоненте 48
  22. Разное Min/Max Size Layout и ScrollBoxLayout поддерживают min/max для width/height

    размеров. Screen Mixins Новый механизм выделения сквозной функциональности UI экранов в интерфейсы- примеси. Context Help Все UI компоненты поддерживают иконку контекстной справки с подсказкой. 49 ValueChange Source В события изменения значения в UI компонентах добавлен признак userOriginated. Button ClickEvent Для кнопок доступно событие ClickEvent. Назначать Action больше не требуется. BCrypt Hash Для новых проектов используется алгоритм хэширования паролей BCrypt.