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. RAD на Spring Boot
    для эффективного создания
    корпоративных приложений

    View Slide

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

    View Slide

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

    View Slide

  4. Универсальная архитектура

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. DRY, который мы заслужили

    View Slide

  9. DRY, который мы заслужили

    View Slide

  10. DRY, который мы заслужили

    View Slide

  11. DRY, который мы заслужили

    View Slide

  12. DRY, который мы заслужили
    А теперь повторим DTO и
    их валидации на клиенте!

    View Slide

  13. Кто будет писать столько boilerplate-a?

    View Slide

  14. Автоматическая генерация boilerplate-а
    не освобождает от его дальнейшей
    поддержки!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. Rapid Application Development
    "First make it work,
    then make it right."
    --Kent Beck

    View Slide

  20. Зачем Jmix?
    Почему бы просто не воспользоваться JPA + Spring Data + Vaadin?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. Компоненты Jmix
     Framework
     Free, open source
     Studio
     Freemium plugin for IntelliJ IDEA
     Add-ons
     Большинство аддонов - free, open source

    View Slide

  26. Пишем Issue Tracker
    Бизнес-требования:
     Роль Reporter
     Видит только экраны списка
    и редактирования Issue
     Не может изменять поле Milestone
     Не может редактировать и удалять чужие
    тикеты
     Отсылать email автору тикета, если он изменен
    кем-то другим
     Журналировать все изменения в тикетах

    View Slide

  27. Особенности фреймворка Jmix
     Модель данных и метаданные
     DataManager
     Оптимизация доступа к БД
     Элементы UI
     Подсистема контроля доступа
     Модульность и расширяемость

    View Slide

  28. Модель данных и метаданные
    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

    View Slide

  29. Модель данных и метаданные
    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

    View Slide

  30. 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

    View Slide

  31. 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

    View Slide

  32. 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

    View Slide

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

    View Slide

  34. Оптимизация доступа к БД
    Fetch Plans
    Issue 42
    milestone == M1
    DataManager.load(Issue)
    .id(42)
    .fetchPlan("with-milestone")
     Возможны частичные
    сущности
     Не нужны проекции

    View Slide

  35. UI: дескрипторы и контроллеры
    IssueBrowse.java
    issue-edit.xml

    View Slide

  36. UI: обработчики событий и делегаты

    View Slide

  37. UI: контейнеры данных

    View Slide

  38. 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()

    View Slide

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

    View Slide

  40. MyAccessConstraint
    Подсистема контроля доступа
    Принятие решения об авторизации
    MyService
    в точке авторизации
    AccessManager
    2) applyRegisteredConstraints()
    MyAccessContext
    1) create
    MyAccessConstraint
    3) apply()
    4) modify state
    5) check state
    AccessContext AccessConstraint
    implements implements
    можно
    дополнять

    View Slide

  41. Модульность и расширяемость
    Email Sending Add-on
    email email-starter
    email-ui email-ui-starter
    Дерево модулей позволяет:
    • Задавать порядок:
    • Выполнения Liquibase changelogs
    • Переопределять:
    • Свойства приложения
    • Локализованные сообщения
    • Экраны
    • Системные классы типов данных и пр.

    View Slide

  42. Ограничения Jmix
     Server-side-state UI ограничивает вертикальную масштабируемость
     5-10M на пользовательскую сессию
     Кастомизация UI сложнее, чем с классическим фронтендом
     Нужна готовность идти на компромисс при разработке требований
     Data-centric
     Не дает значительного преимущества, если модель бизнес-объектов сильно отличается от модели
    хранения

    View Slide

  43. Спасибо за внимание!
    www.jmix.io
    www.jmix.ru
    www.haulmont.ru

    View Slide