Оба подхода технически могут работать и являются действительными. Какой из них вы выберете, зависит от варианта использования и (учитывая, что оба могут работать здесь) от личных предпочтений. Вот почему я просто выделю несколько ключевых отличий ниже и объясню, когда лично я решу использовать какой.
Первый описанный вами подход - это обработка вашей базы данных как конечного автомата , где каждое состояние и переход состояния имеют конкретное значение. Затем вы используете облачные функции для запуска кода при переходе между состояниями.
Второй подход обрабатывает базу данных как очередь , где наличие данных указывает на то, что должно произойти. Таким образом, Cloud Functions затем запускает простое присутствие документа.
Обычно я использую подход, основанный на очереди, для производственной работы, поскольку он позволяет очень легко увидеть, сколько работы еще предстоит сделать. Все в вашей коллекции notifications
является уведомлением, которое необходимо отправить.
В модели данных с переходом состояния гораздо сложнее легко увидеть эту информацию. Фактически вам нужно добавить дополнительные поля в документ, чтобы иметь возможность получить этот список «ожидающих уведомлений». Например: аренда с ожидающим уведомлением - это аренда, где отметка времени, когда статус изменился с 0 на 1 (поле, которое вам нужно добавить, например, status_1_timestamp
), меньше отметки времени, когда было отправлено последнее уведомление (поле, подобное notification_timestamp
).
Но я иногда тоже использую подход с переходом между состояниями. Обычно, когда я хочу преобразовать существующий документ, или потому что это просто классный вариант использования для показа (как в большинстве случаев Firebase / Firestore SDK не будут выставлять как старое, так и новое состояние).
Я бы, вероятно, выбрал подход, основанный на очереди, но, как уже было сказано ранее: это личное предпочтение для меня на основании вышеизложенного. Если эти причины не относятся к вам или у вас есть другие причины, это тоже может быть хорошо.