Приложение
Приложение#
- Практические советы
- Создание выборки без класса
- Создание avm-файла для выборки без класса
- Проектное переопределение
- Наследование базовой логики
- Проектные переопределения
- Работа с данными, хранящимися в jsonb контейнере
- Атрибуты, хранящиеся в jsonb контейнере
- Получение и установка атрибутов, хранимых в json
- Для атрибута, хранимого в json и настроенного как объектная характеристика в
JObjectAttrApi.scala
, реализован набор методов для записи и чтения данных из контейнера: - Универсальные характеристики(UC)
- Чтение и запись иных данных в json контейнер
- Примечания по работе с jsnonb контейнерами
- Работа с серализированными данными
- JSON
- Классы-расширения. Simple Extensions
- Запуск отладки/теста
- Как вносить изменения
- Как обновить внешние зависимости
- Как переопределить методы API
- Как переопределить методы AVI
- Как переопределить сеттеры API
- Как переопределить сеттеры AVI
- Как сбросить кэш
- Как собрать проект
- Как создать класс
- Как создать коллекцию
- Как создать новое отображение
- Как создать точку расширения
- Найти и открыть класс из настройки системы
- Настройка автонумерации
- Настройка группировки класса
- Поиск по коду в Idea
- Создание логического атрибута класса
- Практики разработки
- Полезные практики от опытных разработчиков
- Практика Avi
- Про
selectStatement
иonRefreshExt
- Объектный запрос
- Добавление нехранимых полей
- Нехранимые строки
- Динамическое присоединение столбцов
- Динамическое изменение свойств avm
OnrefreshExt
и значение даты с выборки- Поиск отображения на выборке
- Пользовательская блокировка
- Объект класса в процессе создания и другие состояния объекта rop
- Как узнать, что выборка является главным меню или главной выборкой формы
- Фильтрация в деревовидном списке (отображение Tree классов-деревьев)
- Про
- Практика SQL
- Практика avm, примеры интерфейсов
- Практика odm
- Практика код
- Вычисление суммы без использования буфера
- Группировка объектов с использованием null-типов
- Сравнение диапазона дат
- .distinct или .toSet для scala-коллекций и особенности применения
immutable.Map.builder
вместоmutable.Map
- Признак наличия модуля на проекте
- Применение ASQL/ ASelect/ OQuery/ TxIndex/ refreshByParent и byParent
- Практики при разработке документов
- Разработка под высокую нагрузку
- Работа с кэшем
- Применяйте правильно byParent и byKey, вместо refreshByParent и refreshByKey
- Применяйте правильно Session.commit, Session.commitWork, flush и flush(true), чтобы не достичь лимита загружаемых ячеек
- Загрузка множества объектов
- Используйте предварительную прогрузку данных в кэш через batchIn и queryKeys
- При массовой обработке объектов используйте Btk_BulkProcessPkg().chunkedQuery
- При массовой регистрации объектов используйте Btk_BulkProcessPkg().findObjects.
- Scala код
- Используйте View или withFilter, чтоб избежать создания временных коллекций
- Избегайте использования filter несколько раз подряд
- Используйте lazy val
- Используйте коллекции, имеющие оптимальную сложность поиска, взамен обладающих линейной при частом обращении за нахождением
- На while и рекурсии добавляйте защиту по кол-ву итераций
- Не эмулируйте существующие методы работы с коллекциями
- Используйте ArrayBuffer вместо ListBuffer
- При проверке на существование - не прибегайте к фильтрации
- При проверке на пустоту - не вычисляйте длину
- В checkWorkability (CWA) используйте getVar вместо обращений к БД (ASelect, ATSQL, OQuery, Load, byParent, byKey и т.д.)
- Избегайте использовать copyAro
- В Avi пишите только бизнес логику для взаимодействия с пользователем, все остальное выносите в методы Api
- Не пишите длинные выражения и запросы в одну строчку
- Создавайте общие trait без реализации для разных отображений с одинаковой функциональностью
- Создавайте библиотеки для использования общих методов в различных выборках
- Не используйте поля Tuple, а по возможности пользуйтесь экстрактором
- Используйте «.lastOption, .headOption, dropRight(1), .drop(1), .reduceOption» вместо «.last, .head, .init, .tail, .reduce»
- Не складывайте строки через +, используйте строковую интерполяцию
- При сборе сложной строки не создавайте много промежуточных результатов
- Используйте Option при работе с пустыми (null) ссылками
- Избегайте выполнения запросов внутри вложенных циклов
- Используйте параллельные вычисления, если требуется множественная обработка независимых объектов
- Sql запросы
- Просматривайте план выполнения запроса, чтобы узнать проблемные места
- При написании сложных запросов дробите его на части и используйте подзапросы
- Используйте индексы, чтобы ускорить получение запрашиваемых данных
- Используйте параметры при передаче значений в запрос
- При группировке минимизируйте кол-во группируемых полей
- Фильтруйтесь по индексируемым полям, вместо служебных полей
- При соединении таблиц по идентификаторам, избегайте различных преобразований
- Используйте правильное приведение типов, в соответствие, с типом данных поля
- Добавляйте защиту от зацикливания в рекурсивных запросах
- Работа с кэшем