Полезные практики от опытных разработчиков#
Переопределение checkWorkAbility()#
В checkWorkAbility нельзя использовать:
thisRop(), заместо этого лучше использоватьgetVar/getSelfVarобходчики, особенно с инвалидацией в БД (запросом на согласование данных в БД) (например,
refreshByParent()).
Нужно понимать, что checkWorkAbility вызывается часто, поэтому его оптимизация сильно сказывается на времени работы бизнес-логики.
session.flush() заместо session.commit()#
session.commit() лучше избегать и использовать session.flush().
commit() выгружает данные из кэша в БД.
flush() применяет изменения сессии к БД.
В случае использования flush() данные ещё не в БД и есть возможность откатить изменения, например, в случае ошибки.
commit() вызывает afterEdit() с проверкой обязательных полей в отличии от flush().
Избегать использование [Option].get и [Collection].head#
Не использовать для:
Option
.get, если внутри былNone, то выпадет исключение.Использовать
.getOrElse(<значение или исключение, в случае None>).коллекций .head без проверки на пустоту коллекции.
лучше использовать
.headOption, что вернёт результат в конструкцииOption, который дальше распаковать через.getOrElse().
Миксин Btk_Object#
миксин Btk_Object хранит все записи классов супер-типа документ и справочник.
В него нельзя вносить изменения! Это системный миксин.