Что такое TeqFW?

Дата публикации: 2024-04-29

TeqFW — сокращение от Tequila Framework, фреймворк для веб-приложений на чистом JavaScript. Это не попытка соперничать с крупными платформами вроде Angular, Laravel или Django, а практический эксперимент: может ли один разработчик или небольшая full-stack-команда уверенно создавать приложения для малого и среднего бизнеса.

Один язык для всей логики

HTML и CSS необходимы, но программная логика веба может быть на одном языке — JavaScript. Node.js позволил писать серверный и браузерный код в одной экосистеме. Для меня это означает меньше переключений контекста и больше практики в одном инструменте: лучше хорошо владеть одним языком на фронтенде и бэкенде, чем поверхностно — несколькими.

JSDoc вместо трансляции

Транспиляция удобна, но исполняемый в браузере код при этом отличается от исходника в IDE. Это усложняет отладку и сопровождение. TeqFW предпочитает использовать тот же JavaScript, который будет выполнен, а структуру данных и контракты описывать с помощью JSDoc. Он помогает навигации и рефакторингу, не ограничивая возможности языка и не добавляя шаг сборки.

Внедрение зависимостей

Центральный элемент — контейнер зависимостей, работающий и в браузере, и в Node.js. Связывание объектов во время запуска уменьшает жёсткую связанность, упрощает тестирование и позволяет переопределять базовую функцию плагином или обёрткой без правки исходного кода.

В TeqFW пространство имён, ES-модули и 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.