У меня вопрос по дизайну, когда использовать класс в Javascript, одноэлементном классе класса или просто экспортировать функции модуля;
Допустим, у нас есть очень простая функция pub-sub файла, которая Я хочу использовать во всем приложении, в основном с 3 элементами;
- функция для публикации sh события
- функция подписки на событие
- Список подписчиков
Конечно, я хотите иметь единый список подписчиков в приложении, который используется при использовании функции publi sh (все подписчики получают сообщение).
Я мог бы сделать это, создав модуль, который экспортирует publi sh и подписывается, но не подписчиков
// pubsub.js
const subscribers = [];
function publish(event, data){...} // publishes to all subscribers in the list
function subscribe(event, callback){...} // Adds a callback to the subscribers
export {
publish,
subscribe
}
// other files;
import {publish, subscribe} from 'pubsub'
Но насколько я знаю, я могу добиться того же результата, создав класс; создание экземпляра и экспорт этого экземпляра, а не только функции
// pubsub.js
class EventService {
constructor() {
this.subscribers = [];
}
publish(event, data){...} // publishes to all subscribers in the list
subscribe(event, callback){...} // Adds a callback to the subscribers
}
export default eventService = new EventService();
// other files;
import eventService from 'pubsub'
И в последнем случае я также могу экспортировать сам класс (что обычно имеет смысл) и создать экземпляр при запуске приложения и поделиться им через приложение (с DI).
Вопрос такой; Как быть с go, если вы хотите, чтобы некоторые функции были общими для всего кода, который использует один и тот же список элементов, и вы хотите убедиться, что активен только синглтон. (Поскольку наличие нескольких экземпляров EventService даст неверные результаты при публикации в другом экземпляре)
(я знаю, что существуют библиотеки pubsub, это просто пример фрагмента кода, который должен использоваться в коде в единичный экземпляр).