Алексей Стукалов — Механизм расширений продуктовых решений

Алексей Стукалов — Механизм расширений продуктовых решений

3fc5b5eb32bd3b48d7810fd67b37f9a1?s=128

Moscow JUG

June 29, 2017
Tweet

Transcript

  1. Механизм расширений продуктовых решений Алексей Стукалов Директор по проектам Haulmont

    Technology
  2. Зачем кастомизировать? Продуктовые системы не считаются с требованиями бизнеса и

    навязывают свой подход, исходя из существующего функционала. Компания, внедряющая «коробку», утрачивает свою уникальность в части ведения бизнеса. 2
  3. Основные проблемы кастомизации  Архитектурные ограничения глубины кастомизации  Снижение

    управляемости исходного кода  Поставка обновлений 3
  4. Общеизвестные подходы  Все в одном  Бранчевание  Entity-Attribute-Value

     Плагины 4
  5. Как это делаем мы Продукт – базовая система Проект –

    индивидуальная часть Проект наследует функциональность продукта и переопределяет модель данных, бизнес-логику и пользовательский интерфейс Проект содержит исключительно уникальные фичи конкретного заказчика, не дублируя продукт 5
  6. Open Inheritance в Java коде Расширение модели данных Наследование XML

    дескрипторов экранов UI Наследование свойств приложения Архитектура расширений 6
  7. Пример из жизни: такси Sherlock – продукт автоматизирующий деятельность такси

    компаний 1ый уровень кастомизации – проект содержащий географически- локализованные особенности 2ой уровень кастомизации – проект учитывающий уникальность компании на конкурентном рынке 7
  8. Кастомизация модели 8

  9. Как это выглядит в коде? Задача: Добавить в сущность User,

    находящуюся в компоненте приложения, поле Address MyUser.java 9
  10. Как работает @Extends? Эффективный класс сущности – самый глубокий потомок

    класса сущности 1. Конструкторы. Object Factory возвращает эффективный класс 2. Запросы. JPQL парсится и модифицируется на лету в соответствии с эффективным классом 3. Траверсивно по модели. На этапе сборки проекта генерируется orm.xml заменяя класс сущности предка в узлах на эффективный класс 10
  11. Бизнес логика на среднем слое Spring Framework прекрасно с этим

    справляется: 1. Перегружаемая логика пишется в продукте, помещаясь как @Component 2. В проекте компонент перегружается и перерегистрируется в spring.xml 3. Новая имплементация работает глобально и в проекте и в продукте 11
  12. Кастомизация UI 12

  13. Продуктовый экран редактора пользователя 13

  14. Пример из жизни такси 14

  15. Обновления 1. Указать новую версию продукта, на котором основывается проект

    2. В случае, если API поменялся и это оказывает влияние на проект – он физически не соберется, пока новый API не будет поддержан 3. Собрать проект и установить на сервера заказчика Факт: ТЕЗИС имеет более 300 инсталляций. Более 60 из них кастомизированы под заказчика. Эти проекты обновляются 1 раз в год, вместе с продуктом. 15
  16. Вопросы? 16