Что такое TeqFW?
Дата публикации: 2024-04-29TeqFW — сокращение от Tequila Framework, фреймворк для веб-приложений на чистом JavaScript. Это не попытка соперничать с крупными платформами вроде Angular, Laravel или Django, а практический эксперимент: может ли один разработчик или небольшая full-stack-команда уверенно создавать приложения для малого и среднего бизнеса.
Один язык для всей логики
HTML и CSS необходимы, но программная логика веба может быть на одном языке — JavaScript. Node.js позволил писать серверный и браузерный код в одной экосистеме. Для меня это означает меньше переключений контекста и больше практики в одном инструменте: лучше хорошо владеть одним языком на фронтенде и бэкенде, чем поверхностно — несколькими.
JSDoc вместо трансляции
Транспиляция удобна, но исполняемый в браузере код при этом отличается от исходника в IDE. Это усложняет отладку и сопровождение. TeqFW предпочитает использовать тот же JavaScript, который будет выполнен, а структуру данных и контракты описывать с помощью JSDoc. Он помогает навигации и рефакторингу, не ограничивая возможности языка и не добавляя шаг сборки.
Внедрение зависимостей
Центральный элемент — контейнер зависимостей, работающий и в браузере, и в Node.js. Связывание объектов во время запуска уменьшает жёсткую связанность, упрощает тестирование и позволяет переопределять базовую функцию плагином или обёрткой без правки исходного кода.
В TeqFW пространство имён, ES-модули и DI разделяют код на три области:
- Back — только сервер: Node.js и серверные npm-пакеты;
- Front — только браузер: веб-ресурсы и клиентская логика;
- Shared — общий код, который по возможности связывается через DI.
Повторное использование
Код организован в npm-пакеты и собирается обычным package.json. Базовые пакеты — @teqfw/di и @teqfw/core. По задаче подключаются @teqfw/db, @teqfw/web, @teqfw/i18n и другие.
Например, приложение с пользовательской и административной частью может состоять из @app/base с общими моделями, @app/client и @app/admin. Общие решения, такие как аутентификация, выделяются в самостоятельные пакеты. Такой подход обычен для Node.js, но менее привычен для браузерного кода, который часто собирают в большие бандлы.
Архитектура приложения
TeqFW рассчитан на приложения с небольшой или умеренной нагрузкой, которыми владеет одна-две команды, преимущественно для мобильного браузера. PWA, Service Worker, Cache Storage, IndexedDB и Web Push переносят подходящую обработку и кэширование ближе к пользователю.
Общие данные могут храниться на сервере в реляционной базе, личные — кэшироваться в IndexedDB браузера, а обработка распределяется между фронтендом и бэкендом. Это не набор микросервисов, а модульный монолит: фактически два самостоятельных приложения, собранных из совместимых пакетов.
Данные и изменяемость
Для реляционных БД TeqFW использует DBAL-слой на базе Knex.js. Каждый пакет описывает свой фрагмент схемы, а приложение собирает их в Domain Entities Map и создаёт нужную структуру базы. Так один пакет может сочетаться с разными моделями пользователей в разных приложениях.
Главная цель платформы — изменяемость кода: быстро понять отдельный фрагмент и добавить новую возможность, не ломая существующую. Этому служат DI, декомпозиция, соглашения об аргументах и структуры исходников. Скорость исполнения и идеальная обратная совместимость здесь не абсолютные приоритеты: приложение может фиксировать проверенные версии пакетов.
Вывод
TeqFW исследует модульную разработку современных веб-приложений на JavaScript для индивидуальных разработчиков и небольших команд. В его экосистеме есть пакеты для DI, запуска Node.js-приложений, баз данных, почты, веб-сервера, HTTP/SSE/Web Push, Vue, Quasar и локализации. Они уже применяются в личных и коммерческих проектах; наиболее зрелым компонентом остаётся @teqfw/di.