Как эффективно организовать методы и связи пожарного депо - PullRequest
0 голосов
/ 19 января 2019

В настоящее время я работаю с Firebase Firestore и Next JS. Я гуглил, как организовать проект пожарного депо, но большинство из них (все на самом деле) не масштабируемы.

То, что я пытался сделать, - это иметь папку, содержащую все компоненты, связанные с Firebase, такие как конфигурации и служебные методы. Я обнаружил, что наиболее сложной задачей является написание функции общего назначения для получения ссылки на коллекцию / документ, которая применяет все поддерживаемые методы, а именно .orderBy(), .limit(), .where() и .doc(). Также очень сложно написать преобразователь, который преобразует данные, возвращаемые базой данных, в другой формат.

Вот что я реализовал:

enter image description here

Где getDocRef.js - это вспомогательная функция, которая объединяет все упомянутые выше методы, getOnce.js и observe.js предоставляют методы, которые взаимодействуют с базой данных, а db.js содержит конфигурации.

Кроме того, для тех, кто заинтересован, вот мое наивное решение для функции .getDocRef():

import db from '../db';

/*
  Options:
  - ref: Specify the ref of a document
  - collectionName: Specify the collection name
  - queryArgs: Specify the arguments to be passed down to .where()
  - orderByArgs: Specify the arguments to be passed down to .orderBy()
  - limit: Specify the fetching limit
  - docName: Specify the document name/id
*/
export default options => {
  const { ref, collectionName, queryArgs, orderByArgs, limit, docName } = options;

  if (ref != null) return ref;

  const initRef = db.collection(collectionName);

  if (docName != null) return initRef.doc(docName);

  if (queryArgs != null) {
    if (orderByArgs != null) {
      if (limit != null)
        return initRef
          .where(...queryArgs)
          .orderBy(...orderByArgs)
          .limit(limit);
      return initRef.where(...queryArgs).orderBy(...orderByArgs);
    }
    return initRef.where(...queryArgs);
  }

  return initRef;
};

Итак, я хотел бы знать, в порядке ли моя текущая реализация Firebase. Если нет, то какую структуру проекта мне следует применять? Как мне улучшить мою текущую структуру, чтобы сделать ее более эффективной? И последнее, но не менее важное: есть ли альтернатива моему наивному решению JS, опубликованному выше? Заранее спасибо

1 Ответ

0 голосов
/ 19 января 2019

Мой личный подход:

  • Извлечение всех учетных данных в .env с помощью dotenv пакета
  • Вызов каталога /lib/db и два файла здесь:
    • init.js для инициализации Firebase/firestore
    • Другой класс с некоторыми методами для CRUD

Если ваш проект становится большим, я предлагаю извлечь метод, связанный с каждой коллекцией, в файл в /lib/db и упорядочить их там (что-то вроде управления состояниями).

...