#javascript #node.js #module #coding-style #refactoring
#javascript #node.js #модуль #стиль кодирования #рефакторинг
Вопрос:
У меня есть класс «Firebase», в котором я пишу все функции (которые связаны с этой службой), используемые на моей стороне сервера.
Сначала код был довольно чистым и понятным, так как в этом классе было не так много функций. Теперь класс является супер гигантским (более 100 функций, не очень коротких). Вот почему я решил разделить класс на модули (возможно, неправильно), чтобы улучшить ясность и организацию проекта.
Что-то вроде этого:
/* eslint-disable no-empty */
const functions = require("firebase-functions");
const admin = require("firebase-admin");
// Lazy initialization of the admin SDK
try {
const googleCloudServiceAccount = require("../../utils/json/googleCloudServiceAccount.json");
admin.initializeApp({
credential: admin.credential.cert(googleCloudServiceAccount),
databaseURL: URL,
storageBucket: BUCKET,
});
} catch (e) {}
class Firebase {
constructor() {
Object.assign(this, {
auth: admin.auth(),
firestore: admin.firestore(),
storage: admin.storage(),
});
}
}
Object.assign(Firebase.prototype, {
/* Methods */
});
module.exports = Firebase;
Я имею в виду организовать код в модулях, таких как «firebase-auth.js «, «firebase-storage.js «, «firebase-firestore.js «… и, наконец, требуйте все методы модулей (или что-то лучше, потому что это может быть действительно длинный список импорта) и назначьте их моему прототипу класса Firebase.
Мой вопрос: если в методах модулей мне нужно использовать Firebase.firestore, Firebase.auth… (которые являются членами класса Firebase), должен ли я создавать экземпляр класса в каждом модуле?
Есть идеи? Спасибо.
Ответ №1:
попробуйте это, не самое лучшее, но работает как ожидалось
создайте файл с функциями в модуле экспорта, например:
module.exports = function (app, dbConnection, firebase) {
exampleFirebaseFunction(){
}
}
и в вашем основном файле вы называете это как:
require('./routes/firebase-routes.js')(app, dbConnection, firebase);