Skip to content
This repository has been archived by the owner on Sep 22, 2021. It is now read-only.
Sozonov edited this page Dec 24, 2018 · 2 revisions

Гайдлайны по работе с ORM:

  1. все что касается изменения данных в БД должно быть вынесено сразу в ORM, если это 2-3 или больше изменений

  2. в ORM все модифицирующие кастомные методы, должны дожидаться записи в БД

  3. когда вы делаете много модификаций, надо по возможности дожидаться их параллельно -- то есть собирать все в массив промисов

  4. когда происходит несколько модификаций, то надо их все обрачивать в this.batch (если вы в ORM), либо batchModel, если вы в компоненте реакта. Для того, чтобы каждая модификация не триггерила перерендеринг всех компонент, где эти данные используются

  5. model.set - заменяет объект целиком

// НЕВЕРНО!
model.set('users.${id}', {...user, score: 13}) //  неверно, так как присваивание set происходит по ссылке
// ВЕРНО
model.set('users.${id}.score', 13) - если изменить нужно только одно поле
model.setDiffDeepAsync(`users.${id}`, {score: 13, name: 'Ivan'}) - если полей несколько
  1. Нельзя напрямую менять данные в документе и в scope моделе.
// НЕВЕРНО!
game.title = 'New title'
game.players = 10
$game.setDiffDeepAsync(game)

// ВЕРНО, но некрасиво
game = _.cloneDeep(game)
game.title = 'New title'
game.players = 10
$game.setDiffDeepAsync(game)

// ВЕРНО
$game.setEachAsync('', {
  title: 'New title',
  players: 10
})

Clone this wiki locally