Bliss.js — это библиотека, ориентированная на упрощение работы с DOM и асинхронными процессами в JavaScript, сохраняя лёгкость и гибкость кода. Центральным элементом её дизайна является модульная архитектура, позволяющая разделять функциональность на изолированные, легко управляемые части.
Модульная архитектура Bliss.js строится на следующих принципах:
Bliss.js реализует модульность через объектную структуру, где каждый модуль может быть расширяемым объектом с методами и свойствами.
Для создания модуля используется объектная конструкция:
const modal = Bliss.createModule({
name: 'modal',
init: function() {
this.bindEvents();
},
bindEvents: function() {
this.el.querySelector('.close').addEventListener('click', () => this.close());
},
open: function() {
this.el.style.display = 'block';
},
close: function() {
this.el.style.display = 'none';
},
el: document.querySelector('#modal')
});
Ключевые моменты:
name — уникальный идентификатор модуля.init — функция инициализации, вызываемая при
создании.el — ссылка на корневой DOM-элемент модуля, с которым
модуль работает напрямую.Такой подход гарантирует, что внутренние методы модуля не загрязняют глобальное пространство имён.
Bliss.js поддерживает явное объявление зависимостей, что позволяет избежать проблем с порядком загрузки модулей:
const tooltip = Bliss.createModule({
name: 'tooltip',
dependencies: ['modal'],
init: function() {
this.setupTooltips();
},
setupTooltips: function() {
document.querySelectorAll('[data-tooltip]').forEach(el => {
el.addEventListener('mouseenter', () => this.show(el));
el.addEventListener('mouseleave', () => this.hide(el));
});
},
show: function(el) {
const modal = Bliss.getModule('modal');
modal.open();
},
hide: function(el) {
const modal = Bliss.getModule('modal');
modal.close();
}
});
Особенности:
dependencies гарантирует, что нужный модуль
(modal) будет загружен и инициализирован перед
использованием.Bliss.getModule('имя') позволяет получить доступ к
методам других модулей без прямого обращения к глобальным
переменным.Bliss.js поддерживает наследование и расширение модулей, что позволяет создавать специализированные версии базового модуля без дублирования кода:
const advancedModal = Bliss.extendModule('modal', {
open: function() {
console.log('Advanced modal opening...');
this.el.style.opacity = 0;
this.el.style.display = 'block';
setTimeout(() => this.el.style.opacity = 1, 50);
}
});
Bliss.extendModule('baseModule', { ... }) создаёт новый
модуль на основе существующего.super.Bliss.js позволяет подключать модули к основному приложению централизованно:
Bliss.registerModules([modal, tooltip, advancedModal]);
Bliss.initModules();
registerModules принимает массив модулей и регистрирует
их в системе.initModules инициализирует все зарегистрированные
модули, учитывая зависимости и порядок инициализации.Bliss.js поощряет локальное управление событиями:
trigger и обработчики:modal.trigger('opened');
tooltip.on('modalOpened', () => console.log('Tooltip aware of modal opening'));
trigger активирует событие в контексте модуля.on подписывает метод на событие другого модуля, что
сохраняет низкую связность.Bliss.js поддерживает отложенную и динамическую загрузку модулей, что позволяет оптимизировать производительность:
Bliss.loadModule('carousel').then(carousel => {
carousel.init();
});
loadModule возвращает Promise, который
разрешается после полной загрузки модуля.Эти принципы делают код более поддерживаемым, упрощают масштабирование приложений и сокращают количество ошибок при расширении функционала.
Bliss.js как инструмент для модульной архитектуры сочетает простоту API с гибкостью построения сложных приложений. Структурированное разделение кода на модули, управление зависимостями и поддержка расширения позволяют создавать масштабируемые и легко сопровождаемые проекты.