Вот я так и не могу понять как лучше организовать проект на JS, как набор функций бесконечно вызывающие друг друга, или как набор объектов (я понимаю что в js функция это объект и надеюсь вы тоже поняли, что я имею ввиду :)) ). И какие общие методики можно использовать для организации кода. Цели: легкость и быстрота реализации проекта, а также минимальные затраты на поддержку и масштабирование.
Стратегия следующая.
Первый и главный момент - разделяй код по неймспейсам через import/export. Для этого пиши код в модулях и собрай проект тулзой типа parcel-bundler
(рекомендую начинающим) или webpack
(с ним придется потратить много времени для изучения и настройки).
Еще одно преимущество такого подхода - возможность подключить через require
любой из доступныхnpm
модулей.
Когда твой код размещен по модулям, получается что явно проведена черта между деталями реализации и публичными функциями - инкапсуляция.
Второй вопрос уже более относится к теме топика: что экспортировать из модулей - функции или объекты.
На практике начинать проектировать систему с объектов не всегда удобно. Я стараюсь обойтись на первых этапах только функциями. Никто не мешает держать состояние в области видимости модуля, не создавая для этого класса. Разумеется это работает только для случая когда инстанс класса единственнен.
const fs = require('fs') // стандартный модуль работы с файловой системой
let cache = {}
exports.getCached = function (path) {
if (!cache[path]) {
cache[path] = fs.readFileSync(path, 'utf-8')
}
return cach[path]
}
Вот тут хороший пример когда поект реализован без привлечения классов: я развел зависимости по модулям
Задача проекта - вытянуть список праздников, распарся сайт.
А тут хороший пример когда модули экспортируют классы. Предметную область было проще описать классами и их отношениями
Задача проекта - сэмулировать поведение поставщика цен, шля апдейты цен валютных пар по вебсокетам.