(Node.js ) Разделение класса JS на модули

#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);