Полезные практики от опытных разработчиков#

Переопределение 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 хранит все записи классов супер-типа документ и справочник.

В него нельзя вносить изменения! Это системный миксин.