Перейти к основному содержимому

Соглашения разработки

Язык и локализация

  • Комментарии и документация через io.swaggerна русском языке
  • Сообщения об ошибках — в messages_ru.properties (не в messages.properties)
  • Поля сущностей — в entities.properties и entities_ru.properties
  • Значения для UI — в other_ru.properties (не в other.properties)
  • Значения в файлах локализации отсортированы по ключу (case-insensitive)

Миграции Liquibase

  • Предпочтительный формат: XML
  • SQL — только для сложных случаев и изменения существующих данных
  • ID changeSet: <текущий timestamp 13 символов>-<порядковый номер>
  • constraintName для addForeignKeyConstraint — по образцу из src/main/resources/db/create.sql
  • Названия индексов и constraint должны совпадать с Hibernate-генерированными

Стиль кода

  • Использовать var для определения переменных где возможно
  • Использовать CollectionUtils.isEmpty() / isNotEmpty() для проверки коллекций на null и пустоту
  • Использовать import пакетов вместо полных путей к классам в коде

Работа с документами

  • Никогда не вызывать entityService.save() или entityService.delete() для документов и позиций — только через менеджер (docManager.save())
  • При создании нового типа документа — обязательно создать наследника BaseDocManager
  • Движения генерируются через интерфейс GenerateMovements в Entity-классе

Работа с шаблонами форм

  • Автоматическое определение типов, заголовков, обязательности — через рефлексию (не нужно указывать явно, если JPA-модель корректно аннотирована)
  • Для кастомного поведения — использовать valueGetter, valueSetter, readOnly, required и другие builder-методы