Приложение
Приложение#
- Практические советы
- Создание выборки без класса
- Создание avm-файла для выборки без класса
- Проектное переопределение
- Наследование базовой логики
- Проектные переопределения
- Работа с данными, хранящимися в jsonb контейнере
- Атрибуты, хранящиеся в jsonb контейнере
- Получение и установка атрибутов, хранимых в json
- Универсальные характеристики(UC)
- Чтение и запись иных данных в json контейнер
- Примечания по работе с jsnonb контейнерами
- Работа с контейнером jObjAttrs_dz
- Работа с обобщенными json контейнерами в Postgres
- Классы-расширения. Simple Extensions
- Запуск отладки/теста
- Как вносить изменения
- Как обновить внешние зависимости
- Как переопределить методы API
- Как переопределить методы AVI
- Как переопределить сеттеры API
- Как переопределить сеттеры AVI
- Как сбросить кэш
- Как собрать проект
- Как создать класс
- Как создать коллекцию
- Как создать новое отображение
- Как создать точку расширения
- Найти и открыть класс из настройки системы
- Настройка автонумерации
- Настройка группировки класса
- Поиск по коду в Idea
- Создание логического атрибута класса
- Практики разработки
- Полезные практики от опытных разработчиков
- Практика Avi
- Про
selectStatement
иonRefreshExt
- Объектный запрос
- Добавление нехранимых полей
- Нехранимые строки
- Динамическое присоединение столбцов
- Динамическое изменение свойств avm
OnrefreshExt
и значение даты с выборки- Поиск отображения на выборке
- Пользовательская блокировка
- Объект класса в процессе создания и другие состояния объекта rop
- Как узнать, что выборка является главным меню или главной выборкой формы
- Про
- Практика SQL
- Практика avm, примеры интерфейсов
- Практика odm
- Практика код
- Вычисление суммы без использования буфера
- Группировка объектов с использованием null-типов
- Сравнение диапазона дат
- .distinct или .toSet для scala-коллекций и особенности применения
immutable.Map.builder
вместоmutable.Map
- Признак наличия модуля на проекте
- Когда использовать ASQL/ ASelect/ OQuery/ TxIndex/ refreshByParent и byParent у коллекций
- Практики при разработке документов
- Разработка под высокую нагрузку
- Работа с кэшем
- Применяйте правильно byParent и byKey, вместо refreshByParent и refreshByKey
- Применяйте правильно Session.commit, 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, если берете меньше половины атрибутов из rop
- В Avi пишите только бизнес логику для взаимодействия с пользователем, все остальное выносите в методы Api
- Не пишите длинные выражения и запросы в одну строчку
- Создавайте общие trait без реализации для разных отображений с одинаковой функциональностью
- Создавайте библиотеки для использования общих методов в различных выборках
- Не используйте поля Tuple, а по возможности пользуйтесь экстрактором
- Используйте «.lastOption, .headOption, dropRight(1), .drop(1), .reduceOption» вместо «.last, .head, .init, .tail, .reduce»
- Не складывайте строки через +, используйте строковую интерполяция
- При сборе сложной строки не создавайте много промежуточных результатов
- Используйте Option при работе с пустыми (null) ссылками
- Избегайте выполнения запросов внутри вложенных циклов
- Используйте параллельные вычисления, если требуется множественная обработка независимых объектов
- Sql запросы
- Просматривайте план выполнения запроса, чтобы узнать проблемные места
- При написании сложных запросов дробите его на части и используйте подзапросы
- Используйте индексы, чтобы ускорить получение запрашиваемых данных
- Используйте параметры при передача значений в запрос
- При группировке минимизируйте кол-во группируемых полей
- Фильтруйтесь по индексируемым полям, вместо служебных полей
- При соединении таблиц по идентификаторам, избегайте различных преобразований
- Используйте правильное приведение типов, в соответствие, с типом данных поля
- Работа с кэшем