Share
Embed
CUBA Platform 7 Meetup
Yuriy Artamonov
February 14, 2019
Transcript
50 slides
-
2 Мотивация изменений ⊷ Улучшение эргономики инструментов ⊷ Повышение гибкости
фреймворка ⊷ Появление API ⊷ Упрощение подходов ⊷ Фундамент для развития экосистемы ⊷ С сохранением обратной совместимости -
План 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 -
Основные проблемы ⊷ Studio 6.x - отдельное приложение ⊷ Невозможность
работы с кодом ⊷ Собственный парсер Java / Groovy ⊶ Сложно поддержать языки отличные от Java (Kotlin) ⊶ Ограниченный hot deploy 5 -
Варианты ⊷ IntelliJ IDEA Plugin ⊷ Standalone IDE Функциональность -
одинаковая! https://cuba-platform.com/download Новый плагин CUBA заменяет старый, но включает всю его функциональность 6 -
Open Source Add-ons ⊷ Charts, Reports, FTS, BPM, BI ⊷
Apache License 2.0 ⊷ Только для версий 7.0+ ⊷ GitHub repository & issues Принимаем Pull Requests! 12 -
⊷ Непрозрачность - многое скрыто в недрах предков экранов ⊷
Отсутствие API - жёсткая типовая функциональность ⊷ Реактивное развитие - фичи появляются стихийно в ответ на внешние раздражители Основные проблемы 15 -
Screen Life Cycle События: ⊷ Init ⊷ AfterInit ⊷ BeforeShow
⊷ AfterShow ⊷ BeforeClose ⊷ AfterClose 17 -
Базовые экраны ⊷ Screen ⊷ StandardEditor<E> implements EditorScreen ⊷ StandardLookup<E>
implements LookupScreen ⊷ MasterDetailScreen<E> 18 -
Прикладные интерфейсы ⊷ Notifications - нотификации ⊷ Dialogs - стандартные
диалоги ⊷ Screens / ScreenBuilders - открытие окон ⊷ MessageBundle - пакет сообщений экрана 19 -
Actions Идеология: ⊷ Action позволяет вызвать функциональность, ⊷ Служит мостиком
между бинами и UI компонентами, ⊷ Не содержит полезного кода, только делегирует исполнение. Нововведения: ⊷ @ActionType ⊷ Делегация вместо наследования классов действий 22 -
Typed UI Components ⊷ Все поля ввода - параметризованы типом
значения. ⊷ ValueChangeEvent<V> 23 -
URL Routing - CRUD ⊷ @Route ⊷ StandardEditor поддерживает открытие
по ID http://host:port/app/#main/42/orders/edit?id=17 25 -
URL Routing - Custom ⊷ UrlRouting - API для управления
состоянием ⊷ UrlParamsChangedEvent - событие изменения URL в браузере 26 -
⊷ Datasource - монолитный, громоздкий и плохо- адаптируемый механизм ⊷
Ненадежное отслеживание изменений - сохраняется только то, что лежит в datasource Основные проблемы 28 -
29 Data Components Container Хранит и предоставляет данные UI компонентам.
Loader Декларативный механизм загрузки данных для контейнеров. Data Context Отслеживает и сохраняет изменения в графах сущностей. DataComponents фабрика компонентов данных. -
Контейнеры ⊷ InstanceContainer ⊶ setItem() / getItem() ⊷ CollectionContainer extends
InstanceContainer ⊶ setItems() / getItems() / getMutableItems() ⊶ replaceItem() / getItemIndex(entityId) / getItem(entityId) / setSorter() ⊷ CollectionPropertyContainer extends CollectionContainer ⊶ setDisconnectedItems() / getDisconnectedItems() 30 -
Запросы с параметрами ⊷ Query conditions для декларативного формирования запроса
в зависимости от наличия параметров 35 -
Обработка событий и делегация Делегация вместо создания классов и наследования.
⊷ @Install(target = Target.DATA_LOADER) ⊷ @Install(target = Target.DATA_CONTEXT) 38 -
⊷ EntityChangedEvent ⊶ Содержит id измененной сущности ⊶ Содержит старые
значения локальных атрибутов и старые id ссылок ⊶ Может быть обработан внутри транзакции или после коммита ⊶ Требует наличия аннотации @PublishEntityChangedEvents ⊷ TransactionalDataManager ⊶ Выполняет действия в контексте активной транзакции или стартует новую ⊶ Принимает и возвращает detached сущности, явно сохраняет в БД ⊶ Применяет security и все остальное ⊷ Работают JPA lifecycle callbacks ⊶ @PrePersist, @PreUpdate, etc. Изменения в API среднего слоя 39 -
Совместимость экранов UI Реализован слой совместимости: ⊷ AbstractWindow extends Screen
⊷ WebScreens implements WindowManager Источники данных: ⊷ Screen - data components ⊷ AbstractWindow / AbstractFrame - datasources 41 -
Совместимость UI компонентов Биндинг данных для UI компонентов выполяется при
помощи адаптеров, e.g. DatasourceTableItems. ⊷ Table.setDatasource -> setItems(Items) ⊷ Field.setDatasource -> setValueSource(ValueSource) ⊷ OptionsField.setOptionsDatasource -> setOptions(Options) 42 -
⊷ Использование FieldGroup не type safe ⊷ Магия усложняет жизнь
инструментам ⊷ Сложная интеграция JavaScript компонентов Основные проблемы 44 -
Form ⊷ Контейнер для UI компонентов ⊷ Легковесная замена FieldGroup
⊷ Все компоненты определяются в design-time 45 -
TreeDataGrid ⊷ Замена TreeTable ⊷ Древовидный вариант DataGrid ⊷ Поддерживает
inline редактирование 46 -
JavaScriptComponent Простейший способ интеграции JavaScript виджетов без создания UI компонентов
на Vaadin. Минимальный вариант использования: ⊷ POJO состояния ⊷ JavaScript файл 47 -
Inline HTML / CSS attributes HtmlAttributes ⊷ CSS атрибуты (XML,
API) ⊷ DOM атрибуты (API) Применение: ⊷ Простейшие манипуляции CSS ⊷ Компоновка при помощи CSS Flex / Grid в CssLayout Ограничение: только для верхнего DOM элемента в UI компоненте 48 -
Разное 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.