1 Востаннє редагувалося mykola.kikets (08.11.2022 14:03:35)

Тема: Правильна реалізація боту

Доброго всім дня і мирного неба всім над головою.
Виникло доволі цікаве запитання:
Пишу я значить Телеграм бота. Потрібно реалізувати систему Кімнат-повідомлень (користувач натискає на кнопку і переходить в іншу кімнату)
Я імпортую класи які створюю в інших файлах через import(...).
Але тут я не можу дещо допетрати:
Що краще: Імпортувати і відразу створювати класи, для створення статичних класів незалежно від клієнта який приєднується, чи може краще їх просто зберігати і на кожного нового клієнта створювати новий об'єкт класу?
Може хтось подібне робив? Що краще для розробки? Як краще для Навантаження, Стабільності і т.п.?

Додаткова інформація:
Бот буде мати функціонал "Мульти-плеєра" (Бот в даному випадку посередник)

2

Re: Правильна реалізація боту

Узагалі - по ситуації. Тут єдиної відповіді немає; але зазвичай якщо є сенс тримати статичні класи, то треба імпортувати всюди. Швидше за все немає. Детальніше без коду лише телепати можуть сказати.
Для навантаження, вочевидь, не треба імпортувати зайвого, а для стабільності - прямі руки.
І так, це не божества програмування, а лише характеристики, вони з маленьких літер пишуться.
Яка БД? Як кешуєте активні дані?

3

Re: Правильна реалізація боту

koala написав:

Узагалі - по ситуації. Тут єдиної відповіді немає; але зазвичай якщо є сенс тримати статичні класи, то треба імпортувати всюди. Швидше за все немає. Детальніше без коду лише телепати можуть сказати.
Для навантаження, вочевидь, не треба імпортувати зайвого, а для стабільності - прямі руки.
І так, це не божества програмування, а лише характеристики, вони з маленьких літер пишуться.
Яка БД? Як кешуєте активні дані?

Щодо БД - Планую використати MongoDB
По кешуванню - важко дати відповідь відразу, оскільки наврядчи будуть дані які підлягатимуть кешуванню...

По коду:
Маю зараз такий фрагмент, але не знаю чи правильна реалізація цієї системи
index.mjs

let impDone = [];
for (let clsPath of fs.readdirSync(__dirname + "/screens", {
  withFileTypes: true,
})) {
  if (clsPath.isFile()) {
    impDone.push(
      import(path.join(__dirname, "screens", clsPath.name)).then((cls) => {
        // console.log(cls);
        return cls;
      })
    );
  }
}

Promise.all(impDone)
  .then((impo) => {
    for (let cls of impo) {
      if (cls.default) {
        screens[cls.screenPath] = new cls.default();
      }
    }
  })
  .finally(() => {
    bot.on("text", (ctx) => {
      if (ctx.message.text.startsWith("!")) {
        if (ctx.message.text.startsWith("!open ")) {
          let screenPath = ctx.message.text.split(" ")[1];
          if (screens[screenPath]) {
            screens[screenPath].start(ctx);
          }
        }
      }
    });
  });

screens/testScreen.mjs

export default class TestScreen {
  constructor() {}
  start(ctx) {
    ctx.reply("Test message");
  }
  buttons(ctx) {}
  onHandler(type, ctx) {}
}

export const screenPath = "test";

Просто цікава думка інших людей які можливо робили подібне