В настоящее время я работаю с Firebase Firestore и Next JS. Я гуглил, как организовать проект пожарного депо, но большинство из них (все на самом деле) не масштабируемы.
То, что я пытался сделать, - это иметь папку, содержащую все компоненты, связанные с Firebase, такие как конфигурации и служебные методы. Я обнаружил, что наиболее сложной задачей является написание функции общего назначения для получения ссылки на коллекцию / документ, которая применяет все поддерживаемые методы, а именно .orderBy()
, .limit()
, .where()
и .doc()
. Также очень сложно написать преобразователь, который преобразует данные, возвращаемые базой данных, в другой формат.
Вот что я реализовал:
Где 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, опубликованному выше? Заранее спасибо