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

Константин Кривопустов — Jmix — RAD платформа на Spring Boot для разработки корпоративных web приложений на Java

Константин Кривопустов — Jmix — RAD платформа на Spring Boot для разработки корпоративных web приложений на Java

Иногда кажется, что кругом одни микросервисы. А чтобы разработать даже минимальное full-stack приложение требуется как минимум по одному frontend и backend разработчику и половинка DevOps-а.

На самом деле многие современные технологии рассчитаны как раз на такое состояние дел. Jmix — это пример того, что классический RAD до сих пор применим и позволяет создавать web приложения с максимальной эффективностью минимальным составом разработчиков (конечно, накладывая некоторые ограничения).

На встрече мы поговорим о том, почему одного Spring Boot не достаточно, как устроен Jmix, почему RAD невозможен без разработки своих инструментов.

Moscow JUG

July 14, 2022
Tweet

More Decks by Moscow JUG

Other Decks in Programming

Transcript

  1. О докладчике и компании Константин Кривопустов, менеджер продукта Jmix Сообщество

    разработчиков Custom development Корпоративные системы Инструменты эффективной разработки Spring Buddy – on the way Компания ~500 чел Jmix ~20K JPA Buddy ~1M
  2. Про что будет речь  Обзор традиционного современного подхода к

    разработке корпоративных приложений  Обзор RAD как альтернативного подхода  Реализация RAD на примере Jmix  Live coding - создаем Issue Tracker  Как устроен Jmix  Ограничения Jmix
  3. Преимущества универсальной архитектуры  Отвязывание слоя хранения данных от слоя

    представления  Гибкая настройка безопасности через слой API и DTO  Тестируемость слоев по отдельности
  4. Преимущества универсальной архитектуры  Отвязывание слоя хранения данных от слоя

    представления  Гибкая настройка безопасности через слой API и DTO  Тестируемость слоев по отдельности  Как у всех!
  5. Корпоративные информационные системы Системы обеспечения бизнеса предприятий, пользователями которых являются

    сотрудники предприятия.  Слой хранения максимально приближен к бизнес-сущностям  Большое количество сущностей и типовых экранов  Функциональный пользовательский интерфейс
  6. Преимущества универсальной архитектуры?  Отвязывание слоя хранения данных от слоя

    представления  Вы когда-нибудь заменяли слой хранения целиком?  Нужна ли возможность трансформации для всей модели?
  7. Преимущества универсальной архитектуры?  Развязывание слоя хранения данных со слоем

    представления  Вы когда-нибудь заменяли отдельно слой хранения?  Нужна ли возможность трансформации для всей модели?  Гибкая настройка безопасности через слой API и DTO  Нужен ли вам API для всех функций системы?  Контролировать доступ к данным можно другим способом
  8. Преимущества универсальной архитектуры?  Развязывание слоя хранения данных со слоем

    представления  Вы когда-нибудь заменяли отдельно слой хранения?  Нужна ли возможность трансформации для всей модели?  Гибкая настройка безопасности через слой API и DTO  Нужен ли вам API для всех функций системы?  Контролировать доступ к данным можно другим способом  Тестируемость слоев по отдельности  Интеграционные тесты!  Testcontainers
  9. Преимущества универсальной архитектуры?  Развязывание слоя хранения данных со слоем

    представления  Вы когда-нибудь заменяли отдельно слой хранения?  Нужна ли возможность трансформации для всей модели?  Гибкая настройка безопасности через слой API и DTO  Нужен ли вам API для всех функций системы?  Контролировать доступ к данным можно другим способом  Тестируемость слоев по отдельности  Интеграционные тесты!  Как у всех!  Без комментариев
  10. Зачем Jmix? Почему бы просто не воспользоваться JPA + Spring

    Data + Vaadin?  Декларативное создание UI  UI-компоненты для корпоративных приложений
  11. Зачем Jmix? Почему бы просто не воспользоваться JPA + Spring

    Data + Vaadin?  Декларативное создание UI  UI-компоненты для корпоративных приложений  Детализированный декларативный контроль доступа к данным
  12. Зачем Jmix? Почему бы просто не воспользоваться JPA + Spring

    Data + Vaadin?  Декларативное создание UI  UI-компоненты для корпоративных приложений  Детализированный декларативный контроль доступа к данным  Готовые функциональные модули (аудит, отчеты, BPM, ...)  Механизм обеспечения модульности и расширяемости  Конфигурируемость многих механизмов в runtime
  13. Зачем Jmix? Почему бы просто не воспользоваться JPA + Spring

    Data + Vaadin?  Декларативное создание UI  UI-компоненты для корпоративных приложений  Детализированный декларативный контроль доступа к данным  Готовые функциональные модули (аудит, отчеты, BPM, ...)  Механизм обеспечения модульности и расширяемости  Конфигурируемость многих механизмов в runtime  Мощная поддержка в IDE, визуальные дизайнеры
  14. Компоненты Jmix  Framework  Free, open source  Studio

     Freemium plugin for IntelliJ IDEA  Add-ons  Большинство аддонов - free, open source
  15. Пишем Issue Tracker Бизнес-требования:  Роль Reporter  Видит только

    экраны списка и редактирования Issue  Не может изменять поле Milestone  Не может редактировать и удалять чужие тикеты  Отсылать email автору тикета, если он изменен кем-то другим  Журналировать все изменения в тикетах
  16. Особенности фреймворка Jmix  Модель данных и метаданные  DataManager

     Оптимизация доступа к БД  Элементы UI  Подсистема контроля доступа  Модульность и расширяемость
  17. Модель данных и метаданные JPA Entity External Service DB 1

    DB 2 JPA Entity JPA Entity JPA Entity JPA Entity DTO Entity DTO Entity MetaClass MetaClass MetaClass MetaClass MetaClass MetaClass MetaClass Metadata API
  18. Модель данных и метаданные JPA Entity External Service DB 1

    DB 2 JPA Entity JPA Entity JPA Entity JPA Entity DTO Entity DTO Entity MetaClass MetaClass MetaClass MetaClass MetaClass MetaClass MetaClass Metadata API
  19. DataManager DataManager UI Screen UI Screen Service JPA DataStore Custom

    DataStore EntityManager ??? • Data access control • Cross-datastore references • Entity events • Lazy loading of references • Add-ons: Search, Dynamic Attributes REST Controller
  20. DataManager DataManager UI Screen Data Repository UI Screen Service JPA

    DataStore Custom DataStore EntityManager UI Screen ??? • Data access control • Cross-datastore references • Entity events • Lazy loading of references • Add-ons: Search, Dynamic Attributes
  21. DataManager DataManager UI Screen REST Controller Data Repository UI Screen

    Service JPA DataStore Custom DataStore EntityManager Service JDBC UI Screen ??? • Data access control • Cross-datastore references • Entity events • Lazy loading of references • Add-ons: Search, Dynamic Attributes
  22. Оптимизация доступа к БД Lazy loading Issue 42 milestone ==

    null issue.getMilestone() Issue 42 milestone == M1 DataManager.load(Milestone) .id(1) Проблема: N+1 запросов к БД DataManager.load(Issue) .id(42)
  23. Оптимизация доступа к БД Fetch Plans Issue 42 milestone ==

    M1 DataManager.load(Issue) .id(42) .fetchPlan("with-milestone")  Возможны частичные сущности  Не нужны проекции
  24. UI: DataContext DataContext Issue 42 Milestone 1 1) Open screen

    and load data 3) User edits issue Title DataContext Issue 42 Milestone 1 4) User clicks OK 6) DataManager .save() DataContext Issue 42* Milestone 1 5) DataContext .commit() 7) DataContext .merge() 2) DataContext .merge()
  25. Подсистема контроля доступа  Аутентификация  Встроенная  Внешняя через

    OpenID Connect или LDAP  Авторизация  Ресурсные роли  Доступ к CRUD операциям, атрибутам сущностей, экранам, меню  Роли уровня строк  Ограничение доступа к определенным экземплярам на уровне запросов JPQL и в памяти после загрузки
  26. MyAccessConstraint Подсистема контроля доступа Принятие решения об авторизации MyService в

    точке авторизации AccessManager 2) applyRegisteredConstraints() MyAccessContext 1) create MyAccessConstraint 3) apply() 4) modify state 5) check state AccessContext AccessConstraint implements implements можно дополнять
  27. Модульность и расширяемость Email Sending Add-on email email-starter email-ui email-ui-starter

    Дерево модулей позволяет: • Задавать порядок: • Выполнения Liquibase changelogs • Переопределять: • Свойства приложения • Локализованные сообщения • Экраны • Системные классы типов данных и пр.
  28. Ограничения Jmix  Server-side-state UI ограничивает вертикальную масштабируемость  5-10M

    на пользовательскую сессию  Кастомизация UI сложнее, чем с классическим фронтендом  Нужна готовность идти на компромисс при разработке требований  Data-centric  Не дает значительного преимущества, если модель бизнес-объектов сильно отличается от модели хранения