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

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

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

Avatar for Moscow JUG

Moscow JUG

June 29, 2017
Tweet

More Decks by Moscow JUG

Other Decks in Programming

Transcript

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

    навязывают свой подход, исходя из существующего функционала. Компания, внедряющая «коробку», утрачивает свою уникальность в части ведения бизнеса. 2
  2. Как это делаем мы Продукт – базовая система Проект –

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

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

    компаний 1ый уровень кастомизации – проект содержащий географически- локализованные особенности 2ой уровень кастомизации – проект учитывающий уникальность компании на конкурентном рынке 7
  5. Как это выглядит в коде? Задача: Добавить в сущность User,

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

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

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

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