Небольшой обзор игры «Cuba» (Куба)

Введение

Разработка CUBA началась в 2008 году. После этого мы прошли несколько очень важных этапов. Сначала это был фреймворк для внутренней разработки без документации и проработанного API. Но он использовался во всей компании и позволял разрабатывать корпоративные приложения быстрее, чем без него.

В 2015 году мы представили CUBA Platform миру, тогда ещё под закрытой лицензией. И получили считанное количество пользователей, что оказалось большим разочарованием. Стало очевидно, что нужно переходить к открытому коду.

2016 и 2017 были очень плодотворными, когда сообщество разработчиков на CUBA значительно расширилось. Это стало большим сдвигом в умах нашей команды и мы стали лучше понимать, что мы делаем правильно, а что – не очень.

В 2018-2019 мы начали разрабатывать чистый и хорошо документированный API и перевели CUBA Studio на платформу IntelliJ. Все это привело к дальнейшему расширению сообщества и, следовательно, к большей положительной обратной связи. И сейчас мы стоим на пороге очередного крупного обновления. Давайте рассмотрим подробнее, что ждет нас в 2021-м году.

Цели создания новой версии

В новой версии CUBA нам хотелось сделать следующее:

  1. Сделать опыт разработки ближе к наиболее популярным фреймворкам. CUBA Platform использует чистый Spring, но сейчас Spring Boot практически завоевал мир. Кроме того, можно наблюдать восхождение новых фреймворков, таких как Micronaut и Quarkus. Все они немного схожи в основных принципах: простая настройка с использованием или файлов, интенсивное использование аннотаций и простое добавление и конфигурация дополнительных модулей. И мы хотели, чтобы при разработке на CUBA у разработчиков был похожий опыт.
  2. Не изобретать колесо. С 2008-го года было разработано много новых библиотек и инструментов. Сейчас они достигли зрелости и могут быть использованы для построения серьезных бизнес-приложений. И нам хотелось заменить некоторые части CUBA на надежные и проверенные библиотеки. В качестве примера можно привести систему обновления базы данных.
  3. Уменьшить размер CUBA приложений. При создании приложения с помощью CUBA Platform не всегда требуются все его возможности (например, аудит). Но это всегда было частью ядра фреймворка, что приводило к созданию лишних (для конкретного случая) таблиц в БД и запуску ненужных сервисов на сервере приложений. Таким образом, было бы неплохо иметь возможность исключения некоторых возможностей CUBA и их подключению только тогда, когда это необходимо.
  4. И самая главная вещь – сохранить существующий опыт и скорость разработки приложения с CUBA.

И первая вещь, с которой мы начнем…

Ядро фреймворка

Когда мы начинали разработку CUBA в 2008, мы использовали “чистый” Spring в ядре фреймворка. В ядре Jmix мы будем использовать Spring Boot.

Использование Spring Boot дает нам следующие преимущества:

  1. Лучший опыт разработки. Сейчас практически каждый Java разработчик знаком со Spring Boot. C Jmix опыт разработки на Spring Boot может быть полностью использован в полной мере, нет нужды учить новый фреймворк, только несколько дополнительных модулей.
  2. Что касается модулей: если ядро основано на Spring Boot, то можно использовать практически все готовые стартеры. Таким образом, мы можем положиться на существующую инфраструктуру и огромное сообщество, а также – на большое количество документации и готовых решений.
  3. И ещё одна вещь – у Spring Boot есть великолепные возможности по части развертывания и поддержки контейнеров прямо “из коробки”.

Говоря о стартерах Spring Boot, невозможно не упомянуть CUBA компоненты. И это ведет к обсуждению ещё одной вещи…

Безопасность

В Jmix система безопасности будет поставляться отдельным модулем. Теперь вы выбираете, хотите вы использовать подсистему от CUBA или свою собственную.

И мы переработали систему обеспечения безопасности. Теперь она тесно интегрирована со Spring Security. Для того, чтобы облегчить жизнь разработчикам и продолжать следовать принципу “не изобретать колесо”, мы заменили наш код на вызовы “стандартной” библиотеки. У Spring Security превосходная документация, и эта библиотека хорошо знакома разработчикам. Модель данных системы безопасности поменялась в соответствии с этим: в Jmix мы используем классы из Spring Security, такие как и , для опытных CUBA разработчиков это может быть поначалу немного непривычно.

Роли тоже поменялись – мы объединили роли и группы доступа, чтобы упростить управление безопасностью. В дополнение к этому мы добавили “объединяющую” роль. Она составляется из нескольких ролей – мы получали большое количество запросов от пользователей по поводу реализации этой функциональности.

Spring Security – не самая простая вещь в использовании и настройке, но в Jmix мы сделали этот процесс настолько простым, насколько возможно. Вы сможете настраивать доступ к сущностям, атрибутам, экранам, а также настраивать безопасность на уровне строк БД, как это было в CUBA.

И, как это было в CUBA, все, что будет нужно, чтобы добавить подсистему безопасности в ваше приложение – это просто добавить зависимость в свой проект, а уж Jmix сделает все остальное. У вас будет установленная и настроенная система безопасности с экранами управления (если захотите).

Кроме подсистемы безопасности есть ещё одна вещь, которая нравилась почти всем, кто использовал CUBA – простота создания такой важной части приложения, как..

Пользовательский интерфейс

Универсальный пользовательский интерфейс остается. Компонентная модель построения пользовательского интерфейса была большой частью CUBA, и мы планируем поддерживать ее и в Jmix. Будут поддерживаться генераторы экранов, визуальный редактор интерфейса и т.д. Мы добавили новые компоненты: отдельный виджет для постраничной навигации и для размещения компонентов

Одно важное отличие – теперь можно исключить универсальный пользовательский интерфейс из приложения полностью благодаря модульной архитектуре Jmix

Нужно заметить, что теперь все Jmix-приложения состоят из одного уровня. Нет больше разделения на “web” и “core”. Этот подход проще и отвечает современным архитектурным требованиям. Если вам нужно разделение на фронт и бэк, можно сделать два Jmix приложения и создать REST API для коммуникации между ними. В этом случае фронт не будет зависеть от модели данных, а вы будете передавать DTO объекты для отображения данных в интерфейсе и для их обработки алгоритмами бизнес-логики.

Когда мы планировали разработку новой версии нашего фреймворка, то не могли проигнорировать заметный рост JavaScript фреймворков для разработки пользовательского интерфейса. Мы начали разработку генераторов для создания экранов с использованием ReactJS – это был модуль в CUBA 7. И мы продолжим эту работу в Jmix. JS фреймворки довольно непросты в освоении, наша цель – сделать ReactJS разработку настолько близкой к разработке универсального интерфейса, насколько это возможно.

Мы создали TypeScript SDK и разработали набор собственных ReactJS компонентов, которые могут быть использованы для разработки пользовательского интерфейса. Модуль front-end работает на основе универсального REST API, который знаком CUBA разработчикам.

Среда разработки поддерживает генерацию простых экранов на ReactJS. Сейчас разработчик может создавать знакомые экраны для просмотра, выбора и редактирования сущностей. Позже мы планируем добавить больше компонентов и упростить разработку экранов в Jmix Studio.

Мы обсудили почти все нововведения в Jmix. Но будет нечестно забыть про…

Развертывание

В CUBA было два формата развертывания: WAR и UberJar, и два варианта: единым приложением или раздельно (core+web+…).

Jmix будет использовать возможности Spring Boot для развертывания. Это означает, что мы можем запускать Jmix приложение как исполняемый JAR файл или развертывать WAR (можно его также запустить как отдельное приложение).

Но самое лучшее здесь – поддержка контейнеров. Теперь не нужно создавать собственный Docker файл для создания образа приложения, генерация такого файла поддерживается “из коробки”. Также можно создавать многослойные JAR файлы для более эффективного использования Docker образов. И, кроме того, поддерживаются cloud-native buildpacks, позволяющие ещё больше упростить создание образа для контейнера.

Таким образом, Jmix приложения будут поддерживать последние достижения в области контейнеризации и выполнения в облачных средах.

Вы можете подумать: “Столько изменений. А как же такая важная тема, как…”

Модульность

Время от времени нам делают замечание, что “пустое” CUBA приложение, в котором нет ни одной строчки бизнес-логики, создает слишком много таблиц в базе данных и содержит множество сервисов, которые, возможно, никогда и не будут использованы.В 7 версии фреймворка мы начали переносить функциональность из ядра в отдельные компоненты. В своей основе CUBA – это набор API, и эта архитектура дает достаточно гибкости, чтобы продолжить процесс разделения приложения на модули.

Начиная с Jmix вы можете использовать различные сервисы (аудит, безопасность и т.д.) отдельно и практически независимо друг от друга. Все эти сервисы теперь предоставляются в виде Spring Boot стартеров. Например, в CUBA есть функциональность аудита, которая теперь выделена в отдельный модуль. И этот модуль, в свою очередь, разделен на два модуля: “Core” и “UI”. Это означает, что теперь вы можете использовать функциональность аудита как целиком, так и только в виде движка, а пользовательский интерфейс для него можете создать сами.

Какая-то функциональность, например, проверка состояния приложения (healthcheck) заменена на стандартный модуль Spring Boot (смотри раздел “не изобретать колесо”).

Jmix предоставляет порядка 20 стартеров. В таблице ниже можно посмотреть некоторые из них, а также зависимости:

ФункциональностьСтартерЗависит от
Entity logAuditData
File storageCore
User settingsUI PersistenceData
Table presentationsUI PersistenceData
Entity logAudit UIAudit, UI
Config properties stored in DBCore
Restore deleted entitiesData toolsData, UI
User sessionsCore
Dynamic attributesDynamic attributesData, UI
Entity SnapshotsAuditData
Related entitiesAdvanced Data OperationsData, UI
Bulk editorAdvanced Data OperationsData, UI

Как видно, стартер “data” используется практически всеми модулями Jmix. И это неудивительно, потому что одна из самых сильных сторон CUBA – это…

Виды рома

Ром делают из мелассы – густого сиропа из сахарного тростника. К сладкой темно-бурой жидкости добавляют дрожжи. Так начинается брожение. После его завершения напиток перегоняют, а затем разливают по бочкам. Далее производители купажируют или очищают ром и понижают его крепость до 34-40° с помощью ионизированной воды.

Эти процессы формируют аромат, вкус и цвет напитка. По последнему признаку он делится на 3 вида:

  1. Светлый. Ром прозрачного или серебристого цвета с выдержкой от 4 месяцев. После перегонки его разливают в металлические чаны или дубовые бочки, поэтому напиток не имеет яркого аромата. Отличается мягким вкусом и является основой классических кубинских коктейлей: «Мохито», «Дайкири», «Пина колада». В чистом виде его пить не принято. Если светлый ром выдерживается в бочках, его фильтруют и очищают от примесей.
  2. Золотой. Выдерживается в бочках из американского белого дуба не менее 3 лет. За этот срок ром приобретает янтарный оттенок, легкий вкус карамели и едва уловимый пряный аромат. Он употребляется в чистом виде со льдом или в составе коктейлей. Самый популярный напиток на основе золотого кубинского рома – «Куба либре».
  3. Темный. Ром вызревает в обугленных дубовых бочках от 4 до 15 лет. За это время он приобретает темно-коричневый или черный цвет. Это тягучий напиток с глубоким карамельным вкусом и легким ароматом дымка и пряностей. Его пьют чистым. Согласно легенде, после рюмки рома пираты съедали ломтик апельсина с корицей. Этот вариант закуски до сих пор распространен на острове. Коктейли с темным ромом на Кубе делать не принято. Исключение – «Эль Президенте».

Туристы из Европы часто покупают на Кубе ароматизированный ром. Он бывает фруктовым, шоколадным, кофейным, ванильным. Такой ром не выдерживают в бочках. Лидер продаж в этой категории – светлый Bacardi Limon. Темный ром не ароматизируют, а золотой принято улучшать только пряностями.

https://youtube.com/watch?v=_vUg0tES4mo

Название

“Что означает CUBA?” – трудно сосчитать, сколько раз нам задавали этот вопрос. Честно говоря, это было всего лишь название (не очень короткое и не очень длинное), данное одному из первых пакетов нашего внутреннего фреймворка в далеком 2008-м году. Если вы покопаетесь в исходниках ядра CUBA, вы также найдете пакеты “chile” и “bali”.

В 2021 мы планируем выпустить новое большое обновление фреймворка. И вместе с этим меняется название. “CUBA” становится “Jmix”ом. Это имя значительно проще объяснить: “J” – это “Java”, а “mix” – технологии и фреймворки, смешанные в одном приложении. Меньше вопросов, и никаких ассоциаций ни с известным всем островом, ни со знаменитым коктейлем.

Фактически, Jmix – это следующее большое обновление CUBA с хорошо известными API и знакомым подходом к разработке. И к фреймворку все ещё прилагается набор удобных инструментов и генераторов кода.

Переименование – немаловажная вещь, которая отражает большие изменения, внесенные в…

Тематические туры

«Ромовые» экскурсии на Кубе заказывает более 50% туристов. Это шанс познакомиться с символом Острова Свободы, погрузиться в его культуру, а заодно осмотреть главные достопримечательности. Мы подобрали 3 надежных варианта экскурсий в Гаване на русском языке.

По Кубе в ритме сальсы

Экскурсия по Колониальной Гаване на целый день. Вам откроется настоящая, нетуристическая Куба. Вы осмотрите главные достопримечательности исторического центра, побываете в музее рома, на фабрике сигар, попробуете лучшие коктейли, пройдете по следам Хемингуэя. А еще насладитесь живой музыкой в традиционных барах и просто хорошо проведете время. Гид расскажет о тонкостях национальной культуры, поможет купить подарки себе и близким по ценам от производителей. Подробнее об экскурсии читайте по этой ссылке.

Живописная «табачная» долина

Насыщенная экскурсия в Долину Виньялес – национальный парк и памятник ЮНЕСКО. По пути вы полюбуетесь местами, которые вдохновляли великих художников, и увидите самые зеленые уголки Кубы. Во время остановок можно сделать яркие фотографии. В долине вы познакомитесь с тонкостями табачного дела. Если захочется экстрима, сможете пролететь над зеленой долиной на зиплайне. А после этого можно восстановить силы блюдами домашней кубинской кухни. Подробнее читайте здесь.

Ром, кофе, табак

Туристы покупают туры на табачные плантации чаще, чем какие-либо еще. На этой экскурсии по королевской табачной фабрике вы побываете за кулисами производства и сможете продегустировать сигары лучших брендов. Позже гид научит вас разбираться в сортах элитного рома. За обедом вы попробуете лучшие блюда национальной кухни и поговорите о местных традициях. Приятный бонус – поездка на нетуристический рынок, где вы сможете купить лучшие кубинские товары по самым низким ценам в Гаване. Более подробная информация по этой ссылке.

Перед поездкой загляните в наш пост о шоппинге на Кубе

Совету по выбору традиционных сувениров и деликатесов, идеи подарков близким, необычные товары – все самое важное в одном месте

ПОНРАВИЛСЯ ПОСТ? РАССКАЖИ О НЕМ ДРУЗЬЯМ!

  • 1

Популярные бренды

Почти все заводы производителей рома на Кубе частично принадлежат государству. Покупать алкоголь выгодно в специализированных магазинах внутри страны. В дьюти-фри выбор меньше. Если вы не знаете, как выбрать кубинский ром, покупайте напитки проверенных производителей. Мы перечислим лидеров.

Bacardi

Компания «Бакарди» была основана на Кубе. Сегодня ее штаб-квартира находится на Бермудах. Ром Bacardi по-прежнему называют кубинским. Это не совсем корректно, так как на Кубе напиток уже не производят. Мы включили бренд в список из уважения к создателю завода.

Основатель корпорации Bacardi Limited Факундо Бакарди внес решающий вклад в развитие ромовой индустрии. В конце XIX века производители напитка переживали худшие времена. Факундо же выдерживал алкоголь в дубовых бочках, фильтровал дистиллят с помощью древесного угля и купажировал ром. В 1862 году он получил признание, превратив «дешевое пойло» в элитный напиток. А еще он основал крупнейший в мире алкогольный завод, находящийся в частном владении.

Сегодня ром «Бакарди» является лидером в своем секторе. Это подтверждает главная награда индустрии – «Три короны». Компания продает более 200 миллионов бутылок рома в год.

Havana Club

Классический кубинский ром и визитная карточка страны. Компания была основана в 1934 году. После революции она перешла в долевую собственность правительства и французской компании Pernod Ricard. Сегодня ром «Гавана Клаб» продается по всему миру – он не экспортируется только в Америку. Зато в США можно купить ром Havana Club от компании Bacardi. Из-за этого производители судятся уже более 20 лет. Самый дешевый продукт бренда – кубинский ром «Ритуал», самый престижный – «Аньехо 15 Аньос». Ценителям рома стоит сходить на Кубе в Музей Havana Club.

Santiago de Cuba

Кубинский ром «Сантьяго-де-Куба» – маленькая загадка. Никто точно не знает, как именно производитель готовит напиток. Известно, что ром выдерживается в дубовых бочках без ободов от 3 до 25 лет. В то время как компания Havana Club активно продвигает бренд всеми доступными способами, Santiago de Cuba просто варит напиток. У производителя нет сайта, он не заботится о рекламе. Однако ром «Сантьяго-де-Куба» входит в тройку самых продаваемых на Кубе. Бренд не экономит на рекламе – он в ней просто не нуждается. В его активе более десятка наград на международных выставках.

Ром Santiago de Cuba делится на 3 вида:

  1. Легкий 38°. Трехлетний ром прозрачного цвета. У него сухой и мягкий вкус, аромат цитруса и меда. С ним делают коктейли.
  2. Выдержанный 38°. Напиток возрастом более 7 лет. Легкий, маслянистый, пряный.
  3. Супервыдержанный 40°. Ром старше 12 лет. Также выпускается элитный напиток 20- и 25-летнего возраста. Цвет от янтарного до черного, вкус с нотками шоколада, чернослива, ванили.

Legendario

Вкус кубинского рома «Легендарио» напоминает десертное вино. Напиток густой, тягучий, сладкий, с ярким ароматом. На Кубе он не популярен. Местные жители презрительно окрестили его «дамским». Туристы из Европы считают иначе и с удовольствием привозят с Кубы ром Legendario.

Компания выпускает ром под следующими марками:

  1. Elixir de Cuba 34°. Семилетний напиток с ароматом меда и пряностей. Он приобретает естественную сладость, потому что производитель настаивает ром на изюме.
  2. Carta Blanca Superior 40°. Сладкий коктейльный напиток 2-летней выдержки.
  3. Anejo Blanco 40°. Светлый четырехлетний ром, который можно пить чистым. Он мягкий на вкус.
  4. Anejo 38°. Золотой ром, который выдерживают в бочках в компании мускатного вина. Слегка приторный, с ярким ароматом винограда.
  5. Dorado 38°. Ром янтарного цвета с шоколадно-ирисовым вкусом. Его пьют в чистом виде.

Caney

Компания Caney варит ром более 150 лет. Ей принадлежит собственная плантация сахарного тростника. «Каней» дорожит традициями. Основные этапы производства напитка поручены людям, а не машинам. Здесь вручную собирают и очищают тростник, разливают патоку по бочкам. Ром выдерживают в пещерах. Компания отказывается строить дополнительные погреба ради увеличения продаж. Удивительно, что ее ром стоит дешевле, чем аналогичная продукция от «Гавана Клаб» или «Сантьяго-де-Куба».

Другие бренды

Обратите внимание на выдержанную продукцию ромоварни Tecnoazucar. Самые известные марки кубинского рома этой компании – Mulata, Santero, Alchemist

Местные жители любят напиток под брендом Vacilon: светлый или золотой. Туристы часто везут с Кубы мягкий и легкий ром марки Varadero: всего 8 видов в различных ценовых категориях, в том числе и элитные 15-летние сорта.

Слой доступа к данным

Мы собираемся анонсировать здесь большое количество изменений, сохранив все лучшие части CUBA и добавив новые возможности, которые повысят вашу продуктивность.

При всех преимуществах в модели данных CUBA было одно фундаментальное неудобство: она достаточно жесткая. Например, если нужно логическое удаление, нужно имплементировать нужный интерфейс или унаследоваться от класса . Также для этого нужно создать столбцы с предопределенными именами в нужных таблицах. А первичный ключ должен был сохраняться в столбце , если используется класс .

И это приводит к ограничениям при разработке модели данных, а также создает проблемы при создании CUBA приложений, если использовалась существующая модель данных, как это случается в случае использования CUBA для миграции приложений с устаревших фреймворков.

В Jmix модель создания сущностей становится более гибкой. Больше не нужно наследоваться от или реализовывать интерфейс . Просто добавьте аннотацию к классу, чтобы фреймворк начал с ним работать.

Также мы решили упразднить интерфейсы, которые задают функциональность сущностей. Например, мы используем аннотацию из JPA и из Spring Boot вместо собственных интерфейсов и .

Это делает код более наглядным – можно сразу сказать, какая функциональность поддерживается сущностью, просто взглянув на её исходник.

“CUBA Views” теперь называются “Fetch Plans” – “планы выборки”. Новое имя более точно описывает назначение этого механизма.

Слой доступа к данным Jmix теперь поддерживает автоматическую ленивую загрузку ссылочных данных. Таким образом, даже если вы не будете использовать планы выборки для выборки ссылочных данных, вы никогда больше не получите ненавистное “UnfetchedAttributeException”.

Ещё одним большим изменением будет другой процесс генерации и обновления базы данных. Мы решили использовать Liquibase вместо собственного движка обновления базы. За запуск скриптов будет отвечать Spring Boot. Это ещё один пример принципа “не изобретать колесо” – использование известного и проверенного движка с хорошей документацией.

Liquibase может генерировать скрипты, не зависящие от используемой БД. Это значит, что если вы разрабатываете дополнение с использованием Jmix, то вам не нужно генерировать скрипты по работе с БД для всех возможных вендоров. Liquibase сгенерирует SQL, специфичный для вашей СУБД, автоматически. В то же время, возможна тонкая настройка скриптов под конкретную СУБД, если это необходимо.

И мы сохраним старую добрую магию CUBA. Если вы меняете сущность, Jmix Studio будет генерировать Liquibase скрипт, отражающий изменения.

О чем мы ещё думаем, когда мы говорим о CUBA? Конечно, о подсистеме, которая обеспечивает…

Поделитесь в социальных сетях:FacebookTwitterВКонтакте
Напишите комментарий