Возможности ER-модель Архитектура Maven Представления Локализация Freemarker
v.5 Enterprise Edition

Data-centric
разработка с BeanExplorer

Enterprise-фреймворк для построения приложений на основе ER-модели. Автоматизация жизненного цикла базы данных, управляемые представления и локализация — всё управляется через Maven.

<!-- pom.xml -->
<parent>
  <artifactId>be5-app</artifactId>
  <groupId>ru.dote.be5-demo</groupId>
  <version>1.0.2</version>
</parent>

<name>be5 test app</name>
<artifactId>testBe5app</artifactId>
<version>0.0.2</version>

<!-- Создание БД одной командой -->
$ mvn be5:create-db
<!-- Синхронизация схемы -->
$ mvn be5:sync
<!-- Валидация модели -->
$ mvn be5:validate

Всё для enterprise-разработки

BeanExplorer берёт на себя инфраструктуру: управление схемой БД, генерацию слоёв приложения, настройку представлений и интернационализацию.

ER-модель в основе

Проектирование начинается с сущностей и связей. Модель — единственный источник истины для всей архитектуры приложения.

Управляемые представления

Настраиваемые layout'ы и атрибуты колонок позволяют гибко управлять отображением данных без изменения кода.

Автоматизация БД

Создание, валидация и синхронизация схемы базы данных через Maven-задачи. Полный контроль жизненного цикла.

Мультиязычность

Встроенная поддержка локализации интерфейса. Перевод элементов модели и UI на несколько языков из коробки.

Freemarker-шаблоны

Мощный шаблонизатор для генерации динамического контента, отчётов и документации прямо из модели данных.

Maven-интеграция

Пользовательские goals: validate, create-db, sync, data, generate-doc. Весь цикл разработки — в знакомых командах.

Сущности и связи — фундамент вашего приложения

В BeanExplorer ER-модель является центральным артефактом. Все слои приложения — от базы данных до пользовательского интерфейса — генерируются и управляются на основе единой модели данных.

1

Сущности (Entities)

Описание бизнес-объектов с атрибутами, типами данных и ограничениями. Каждая сущность сопоставлется с таблицей БД.

2

Связи (Relationships)

Однозначные связи «один-ко-многим», «многие-ко-многим» с каскадными правилами удаления и обновления.

3

Атрибуты колонок

Гибкая настройка отображения: заголовки, форматирование, видимость, порядок и вычисляемые поля.

4

Сопоставление типов

Автоматическое преобразование типов данных между Java-моделью и конкретной СУБД.

User
PK id INT
   username VARCHAR
   email VARCHAR
   created_at TIMESTAMP
▲ 1 : N ▼
Order
PK id INT
FK user_id INT
   total DECIMAL
   status VARCHAR
▲ 1 : N ▼
OrderItem
PK id INT
FK order_id INT
FK product_id INT
   quantity INT

Трёхуровневая архитектура приложения

BeanExplorer реализует классическую трёхзвенную архитектуру, где каждый уровень управляется отдельно, но работает на основе единой модели.

Уровень отображения
Представления (View) · Layout · Freemarker-шаблоны · Колонки
↕ управляется моделью ↕
Бизнес-логика
Сервисы · Валидация · Сценарии · Локализация
↕ управляется моделью ↕
Данные
ER-модель · Схема БД · Типы колонок · Маппинг

Управление проектом через Maven

Все ключевые операции выполняются через пользовательские goals плагина be5. Никаких дополнительных инструментов — только знакомый Maven.

be5:create-db

Создание базы данных с нуля на основе описания модели. Генерация DDL-скриптов и применение схемы к целевой СУБД.

be5:sync

Синхронизация схемы базы данных с текущей версией модели. Миграции, добавление и удаление колонок, изменение связей.

be5:data

Заполнение базы данных начальными (seed) данными. Справочники, тестовые данные, конфигурационные записи.

be5:generate-doc

Генерация документации по проекту: описание модели, диаграммы, спецификации API и представления.

pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>be5-app</artifactId> <groupId>com.developmentontheedge.be5</groupId> <version>1.0.2</version> </parent> <name>be5 test app</name> <artifactId>testBe5app</artifactId> <version>0.0.2</version> <packaging>${packaging.type}</packaging> <dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>[42.0.0,)</version> </dependency> <dependency> <groupId>com.developmentontheedge.be5</groupId> <artifactId>be5-monitoring</artifactId> <version>[0.4.0,)</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>com.developmentontheedge.be5</groupId> <artifactId>be5-maven-plugin</artifactId> <version>0.1.3</version> <dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>[42.0.0,)</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>

Гибкие представления для отображения данных

Слой представлений (View) в BeanExplorer позволяет настраивать внешний вид и поведение интерфейса без изменения кода. Layout определяет структуру экранов, а атрибуты колонок — детали отображения каждого поля.

L

Layout

Конфигурация расположения элементов: панели, вкладки, формы, таблицы. Определяет визуальную структуру экранов приложения.

A

Атрибуты колонок

Заголовок, ширина, формат даты/чисел, цветовое кодирование, условия видимости, вычисляемые значения и ссылки.

T

Типы колонок

Строка, число, дата, перечисление, ссылка на сущность, булево значение — каждый тип имеет собственный рендер.

view.yaml
- Test 1D:   type: 1D   roles: [Administrator, Guest]   layout: '{"topForm":"TopFilter"}'   defaultView: true   operations:   - Delete   - Edit   - Insert   - Filter   code: |2-       SELECT         t.ID AS "___ID",         t.name AS "Name",         '<quick visible="true"/>;<link using="___ID" columns="ID" table="testtable" queryName="Test 1D unknown"/>'           AS ";Name",         t.value AS "Value",         'pretty json format' AS "JSON",         '<quick visible="false"/>;<link columns="_displayType_,_prettyJson_" using="json,yes" table="testtable" queryName="Test 1D"/>'         AS ";JSON"       FROM         testtable t       WHERE 1=1         <if parameter="name">           AND t.name = '<parameter:name/>'         </if>         <if parameter="value">           AND t.value = '<parameter:value/>'         </if>

Сопоставление типов колонок

BeanExplorer на лету преобразует данные между Java-моделью и целевой СУБД, обеспечивая корректное хранение и отображение.

Java-тип SQL-тип Отображение
StringVARCHARТекстовое поле
IntegerINTЧисловое поле
LongBIGINTЧисловое поле (64-bit)
DoubleDOUBLEЧисло с плавающей точкой
BigDecimalDECIMALФорматированное число
LocalDateDATEДата (календарь)
LocalDateTimeTIMESTAMPДата и время
BooleanBOOLEANПереключатель / чекбокс
EnumVARCHARВыпадающий список
Entity (ref)INT (FK)Ссылка на сущность
byte[]BLOBБинарные данные / файл

Встроенная поддержка нескольких языков

Интернационализация заложена в архитектуру BeanExplorer. Переводятся не только элементы UI, но и названия сущностей, полей, заголовки отчётов.

🌐

Перевод модели

Каждый элемент ER-модели может иметь перевод на несколько языков: названия сущностей, заголовки колонок, описания.

⚙️

Язык по умолчанию

Настраиваемый язык по умолчанию в конфигурации Maven-плагина. Переключение «на лету» без перезапуска приложения.

📋

Ресурсные файлы

Стандартный подход с properties-файлами для UI-элементов. Совместимость с Java-экосистемой локализации.

Freemarker для динамического контента

Интеграция с Apache Freemarker позволяет генерировать отчёты, письма, документы и любые текстовые артефакты на основе данных модели.

Генерация документов

Создание PDF, HTML, текстовых отчётов из шаблонов с подстановкой данных модели.

Кастомные директивы

Расширение шаблонизатора собственными функциями для форматирования и бизнес-логики.

Доступ к данным модели

Прямой доступ к сущностям, связям и атрибутам из шаблонов без дополнительного кода.

common.ftl
<#macro SUM_PLAN attr> SELECT CAST(COALESCE(SUM(${"av.plannedValue"?asInt}),0) AS BIGINT) AS V FROM attributeValues av WHERE av.ownerID = '<var:___ownerID />' AND av.attributeID = <var:${attr} /> AND av.year = <var:___year /> </#macro> <#macro SUM_PLAN_CENTER attr> SELECT CAST(COALESCE(SUM(${"av.plannedValue"?asInt}),0) AS BIGINT) AS V FROM attributeValues av INNER JOIN departments dc ON dc.parentID = <var:___depID /> WHERE av.ownerID = CONCAT( 'departments.', dc.ID ) AND av.attributeID = <var:${attr} /> AND av.year = <var:___year /> </#macro>

От создания проекта до запуска

Три простых шага: создание проекта, настройка подключения к БД и запуск.

1

Создание проекта

Инициализация Maven-проекта с подключением плагина be5. Базовая структура каталогов и файл модели создаются автоматически.

2

Настройка проекта

Определение ER-модели, настройка подключения к БД, конфигурация представлений и локализации в pom.xml.

3

Запуск проекта

Одна команда mvn be5:create-db создаёт БД, mvn be5:sync синхронизирует схему.

Готовы начать работу?

Создайте свой первый data-centric проект на BeanExplorer Enterprise Edition v.5

Смотреть команды Maven