Статьи с тегом "#программирование"

✅ Опубликовано: 6
📌 Показаны только опубликованные статьи.

Фильтры статей

Структура для разных частей стека & Фундаментальные принципы организации

Структура для разных частей стека & Фундаментальные принципы организации

9 0 0.0 0
1
Категории: Технологии IT и программирование Языки программирования Веб-технологии

🧱 Фундаментальные принципы организации

Прежде чем перейти к папкам, важно понять ключевые идеи, лежащие в основе любой хорошей структуры:

  • Разделение ответственности (Separation of Concerns): Код разбивается на слои с четкими задачами. Например, слой представления (UI) не должен знать, как работает слой доступа к данным (DB). Это делает систему гибкой и тестируемой.

  • Feature-First (Предметно-ориентированная) vs. Type-First (Тип-ориентированная) структура: Вместо группировки файлов по их технической роли (components/hooks/utils/), feature-first подход группирует все файлы, относящиеся к одной бизнес-функции (например, profile/checkout/), в одном месте. Это значительно упрощает навигацию и поддержку в больших проектах.

  • Масштабируемость (Scalability): Структура должна легко позволять добавлять новые функции, не ломая старые, и быть понятной для новых членов команды.

 

📁 Структура для разных частей стека

1. Backend: Express.js, Hono, Fastify

Для серверной части (API) хорошо зарекомендовала себя многослойная архитектура. Вот как она выглядит на практике.

Общая идея (Layered Architecture):

text
src/
├── config/           # Конфигурации (env, БД, логирование)
├── modules/          # Фичи/модули (feature-first подход)
│   └── users/        # Пример модуля "Пользователи"
│       ├── controllers/   # Обработка HTTP запросов
│       ├── services/      # Бизнес-логика
│       ├── repositories/  # Работа с БД
│       ├── schemas/       # Валидация (Zod, TypeBox)
│       ├── types/         # TypeScript типы для модуля
│       └── index.ts       # Точка входа модуля
├── shared/           # Общие утилиты, middleware, ошибки
│   ├── middleware/
│   ├── errors/
│   └── utils/
├── app.ts            # Инициализация приложения (роуты, middleware)
└── server.ts         # Запуск сервера
  • Express.js: Классический пример — server/ с src/, где лежат resolvers/models/prisma/. В более продвинутых шаблонах используют controllers/services/routes/.

  • Hono: Так как Hono не навязывает структуру, в сообществе предлагают гибкие подходы. Можно использовать feature-first структуру с папкой features/, где каждый модуль содержит свои api/ (эндпоинты), services/ (бизнес-логику), repositories/ (доступ к данным) и validation/. Общие части выносятся в core/ и shared/.

  • Fastify: Рекомендуется структура с routes/ (группировка по ресурсам), plugins/ (для регистрации функциональности), services/ и repositories/.

2. Frontend: React / Next.js

Здесь ключевой выбор — между App Router (рекомендуемый) и Pages Router.

Структура для Next.js (App Router):

text
my-nextjs-app/
├── app/                    # Маршруты и страницы (App Router)
│   ├── (auth)/             # Группа маршрутов для аутентификации
│   ├── (dashboard)/        # Группа для защищенных страниц
│   ├── api/                # API Routes (serverless функции)
│   ├── layout.tsx          # Корневой layout
│   └── page.tsx            # Домашняя страница
├── src/                    # Исходный код приложения (опционально)
│   ├── components/         # Переиспользуемые UI компоненты
│   │   ├── ui/             # Базовые (Button, Input)
│   │   └── layout/         # Структурные (Header, Sidebar)
│   ├── features/           # Фичи (самодостаточные модули)
│   │   └── profile/        # Пример фичи "Профиль"
│   │       ├── components/
│   │       ├── hooks/
│   │       ├── services/   # API вызовы для фичи
│   │       └── types/
│   ├── lib/                # Утилиты, конфигурация клиентов (API, React Query)
│   ├── hooks/              # Кастомные React хуки (глобальные)
│   ├── types/              # Общие TypeScript типы
│   └── context/            # React Context провайдеры
├── public/                 # Статические файлы
└── package.json

Ключевые моменты:

  • Используйте app/ для новых проектов.

  • Для изоляции кода применяйте Route Groups (groupName).

  • Код, относящийся к одной функции, группируйте в features/.

  • Общие компоненты храните в components/.

  • Серверную логику (работа с БД, сервисы) выносите в папку server/ или lib/server/.

 

🏗️ Архитектура на уровне решения (Monorepo)

Если вы разрабатываете фронтенд и бэкенд в одном репозитории, используйте монорепозиторий (monorepo). Это стандарт для полного цикла разработки.

Пример структуры монорепозитория:

text
my-monorepo/
├── packages/ или apps/
│   ├── frontend/          # Next.js приложение
│   │   ├── app/
│   │   ├── components/
│   │   └── package.json
│   └── backend/           # Express / Hono / Fastify приложение
│       ├── src/
│       │   ├── modules/
│       │   ├── shared/
│       │   └── server.ts
│       └── package.json
├── docker-compose.yml
├── package.json           # Корневой package.json с workspaces
└── turbo.json или pnpm-workspace.yaml

Инструменты для управленияpnpm workspacesnpm workspaces, или Turborepo для более сложных сценариев.

 

🚀 Специфика для Bun

Bun — это не только рантайм, но и пакетный менеджер, и сборщик.

  • Структура: Стандартный проект на Bun выглядит так:

    text
    my-bun-app/
    ├── src/           # Исходный код
    ├── index.ts       # Точка входа
    ├── package.json
    └── tsconfig.json
  • Монорепозиторий: Bun отлично поддерживает workspaces в package.json для создания монорепозиториев.

 

📈 От простого к сложному: Эволюция структуры

Важно понимать, что структура растет вместе с проектом:

  1. Начальный уровень (Small Project)app/components/lib/types/. Просто и быстро.

  2. Средний уровень (Medium Project): Добавляются features/ для логической группировки, server/ для серверной логики, ui/ для общих компонентов.

  3. Продвинутый уровень (Enterprise): Внедряются Domain-Driven Design (DDD) с папкой entities/, четкое разделение на core/modules/shared/ и использование принципов Чистой архитектуры.

💎 Итог: Стратегия выбора

  1. Начните с малого: Для нового проекта используйте простую, но логичную структуру (например, app/ + components/ + lib/ для Next.js).

  2. Рефакторинг по мере роста: Как только проект начинает разрастаться, внедряйте feature-first подход, группируя код по функциям в папке features/.

  3. Разделяйте backend и frontend: Даже в монорепозитории четко разделяйте код клиента и сервера по разным пакетам.

  4. Следуйте соглашениям фреймворка: Используйте App Router в Next.js, роутинг по ресурсам в Fastify, и feature-based структуру в Hono.

Выбор правильной структуры — это инвестиция в будущее вашего проекта. Начните с обдуманного базового варианта и развивайте его по мере необходимости.

Вам понравилась статья?
Read more
Cовременная веб-разработка и ряд отраслевых стандартов и лучших практик!

Cовременная веб-разработка и ряд отраслевых стандартов и лучших практик!

10 0 0.0 0
1
Категории: Технологии IT и программирование Языки программирования Веб-технологии

В современной веб-разработке с использованием TypeScript, React, Next.js и Node.js сложился ряд отраслевых стандартов и лучших практик. Эти практики помогают создавать код, который легко поддерживать, масштабировать и развивать в команде.

Ниже представлен сводный обзор ключевых стандартов для каждого компонента вашего стека.

📝 Единые стандарты кода и TypeScript

  • Стиль кода: Для обеспечения единообразия в команде принято использовать один из популярных стилевых гайдов, например Airbnb JavaScript Style Guide или Google Style Guide. Их легко внедрить с помощью соответствующих конфигураций для ESLint (eslint-config-airbnb-typescripteslint-config-google).

  • Строгий TypeScript: В файле tsconfig.json обязательно нужно устанавливать "strict": true. Это включает все строгие проверки типов, что является фундаментом надежности кода.

  • Инструменты линтинга и форматирования: Используйте ESLint для поиска проблем в коде и Prettier для автоматического форматирования. Это обязательный минимум для любого современного проекта.

⚛️ Стандарты для React и Next.js

  • Компоненты: Предпочтение отдается функциональным компонентам с четко описанными TypeScript-интерфейсами для props. По возможности используйте серверные компоненты (Server Components) по умолчанию.

  • Производительность: Для оптимизации используйте встроенные хуки: useCallback для мемоизации функций, useMemo для дорогих вычислений и React.memo для предотвращения лишних перерисовок компонентов.

  • Маршрутизация: В новых проектах на Next.js используйте App Router, так как это современный и рекомендуемый подход.

⚙️ Стандарты для серверных фреймворков (Express.js, Hono, Fastify)

Выбор фреймворка зависит от контекста задачи:

 
 
Фреймворк Лучшее применение
Hono Edge-окружения и serverless (например, Cloudflare Workers). Отличается нулевыми зависимостями и минимальным временем холодного старта.
Fastify Высокопроизводительные API. По скорости работы быстрее Express в 2-3 раза, имеет встроенную валидацию схем.
Express.js Легаси-проекты, стабильность и максимальная экосистема. Самый зрелый и распространенный фреймворк с огромным количеством middleware.

Общие для всех бэкенд-фреймворков практики:

  • Структура проекта (Layered Architecture): Следуйте четкому разделению ответственности, выделяя слои:

    • routes/ — определение эндпоинтов.

    • controllers/ — обработка HTTP-запросов и ответов.

    • services/ — бизнес-логика (не должна зависеть от HTTP).

    • repositories/ или models/ — работа с данными и базой данных.

    • middleware/ — кастомные middleware (аутентификация, валидация, логирование).

  • Валидация: Всегда проверяйте входные данные на границе приложения (в контроллере или middleware). Для этого отлично подходят библиотеки вроде Zod или TypeBox.

  • Обработка ошибок: Используйте централизованный обработчик ошибок и иерархию кастомных классов ошибок (например, ValidationErrorNotFoundError).

🚀 Стандарты для рантаймов (Bun и Node.js)

  • Node.js: Это стандарт де-факто для серверной разработки с огромной экосистемой.

  • Bun: Позиционируется как более быстрая альтернатива. Его стоит рассматривать, если важна производительность, а встроенный бандлер и тест-раннер могут упростить тулинг.

    • Ключевая практика для Bun: Bun нативно поддерживает TypeScript, поэтому для запуска .ts файлов не нужны дополнительные инструменты вроде ts-node. Предпочтительно использовать встроенные Web API (fetchfspath) вместо Node.js-специфичных, где это возможно.

🏗️ Общие принципы архитектуры

  • Чистая архитектура: Стремитесь к тому, чтобы ваша бизнес-логика (сервисы) не зависела от внешних фреймворков и баз данных. Это делает код более тестируемым и гибким.

  • Single Responsibility (SRP): Каждый модуль, класс или функция должны иметь одну четкую зону ответственности.

  • DRY (Don't Repeat Yourself): Избегайте дублирования кода, выносите повторяющуюся логику в утилиты или переиспользуемые хуки/компоненты.

🛠️ Рекомендованный инструментарий

  • Линтерeslint с плагинами для TypeScript, React и Next.js.

  • Форматтерprettier.

  • Типыtypescript (строгий режим).

  • Валидацияzod (отлично работает с TypeScript для вывода типов).

  • Управление состояниями (React)Redux Toolkit или Zustand (более легковесный).

В целом, ключ к успеху — это строгая типизация, четкая структура проекта и автоматизированные инструменты для поддержания качества кода. Выбор между конкретными фреймворками (Express vs Fastify vs Hono) и рантаймами (Node vs Bun) зависит от конкретных требований вашего проекта к производительности, среде запуска и опыту команды.

Вам понравилась статья?
Read more
Принципы и парадигмы (Clean Code)

Принципы и парадигмы (Clean Code)

13 0 5.0 0
4
Категории: IT и программирование Веб-технологии
🌟 Принципы и парадигмы (Clean Code)
SOLID — пять базовых принципов объектно-ориентированного программирования и проектирования (Single responsibility, Open/closed, Liskov substitution, Interface segregation, Dependency inversion).
DRY (Don't Repeat Yourself) — принцип недопущения дублирования кода.
KISS (Keep It Simple, Stupid) — принцип проектирования, при котором простота системы является главным приоритетом.
YAGNI (You Aren't Gonna Need It) — принцип, согласно которому не стоит добавлять функциональность, пока она не понадобится.
📜 Оформление и соглашения (Code Style)
PSR (PHP Standards Recommendations) — общепринятые стандарты кодирования для PHP (например, PSR-1, PSR-4 для автозагрузки).
PEP (Python Enhancement Proposals) — предложения по развитию Python. Самый известный — PEP 8, стандарт оформления кода.
Airbnb Style Guide — строгие и популярные руководства по стилю для JavaScript, React, CSS и других технологий. [1, 2]
📚 Национальные и системные стандарты
ГОСТ ЕСПД (Единая система программной документации) — комплекс государственных стандартов РФ, устанавливающий правила разработки, оформления и обращения программ.
ISO/IEC/IEEE 12207 — международный стандарт, описывающий процессы жизненного цикла программного обеспечения (ЖЦ ПО). [1]
⚙️ Процессы и методологии (DevOps)
SDLC (Software Development Life Cycle) — жизненный цикл разработки ПО (этапы от анализа требований до поддержки).
CI/CD (Continuous Integration / Continuous Delivery) — практики непрерывной интеграции и доставки кода.
TDD (Test-Driven Development) — разработка через тестирование.


💻 Стандарты для TS, React и Express
В экосистеме JavaScript/TypeScript стандарты чаще всего внедряются через конфигурации инструментов автоматической проверки (ESLint, Prettier) и архитектурные паттерны.
TypeScript (TS)
  • TSConfig Strict — официальный стандарт строгого режима компилятора ("strict": true), запрещающий неявные типы any и потенциальные ошибки с null/undefined.
  • TypeScript Style Guide (by Google / Microsoft) — внутренние стандарты ИТ-гигантов, ставшие публичными ориентирами для именования интерфейсов, типов и модулей.
React
  • Airbnb JavaScript/React Style Guide — самый популярный в мире стандарт оформления React-компонентов (правила деструктуризации, использования хуков, JSX-синтаксиса).
  • FSD (Feature-Sliced Design) — современный архитектурный стандарт проектирования фронтенд-приложений. Он делит код на слои (layers), слайсы (slices) и сегменты (segments) для высокой масштабируемости.
Express (Node.js)
  • Node.js Best Practices — крупнейший открытый стандарт (GitHub-репозиторий) по архитектуре бэкенда. Включает правила обработки ошибок, структуры папок и безопасности Express-приложений.
  • REST API Conventions — стандарт проектирования сетевых интерфейсов (правильное использование HTTP-методов, статус-кодов и структуры URL).

 
📋 Методологии управления проектами
В управлении разработкой ПО используются гибкие (Agile) и классические стандарты.
  • Scrum — фреймворк гибкой разработки, основанный на спринтах (1–4 недели), ежедневных созвонах (Daily) и регулярных поставках работающего инкремента продукта.
  • Kanban — метод визуализации работы с помощью досок (To Do, In Progress, Done) для оптимизации потока задач и ограничения незавершенного производства (WIP limits).
  • Agile — общий манифест гибкой разработки программного обеспечения, провозглашающий приоритет людей и работающего продукта над процессами и документацией.
  • Waterfall (Каскадная модель) — традиционная методология с жесткой последовательностью фаз (Анализ → Проектирование → Разработка → Тестирование → Внедрение).
  • PMBOK (Project Management Body of Knowledge) — всемирный стандарт и свод знаний по управлению проектами от института PMI.
  • PRINCE2 (Projects in Controlled Environments) — структурированный британский стандарт управления проектами, сфокусированный на продуктах и контроле стадий.

 
Вам понравилась статья?
Read more

Правильная комбинация инструментов и набор ключевых технологий на клиентской и серверной части.

42 0 5.0 1
3
Категории: IT и программирование

🧱 Архитектура решения

Создание такой студии потребует разделения на три ключевых уровня:

  1. Клиентская часть (Frontend): Здесь пользователь будет работать с макетом в реальном времени. Этот уровень отвечает за отрисовку, перемещение, масштабирование объектов и работу с кривыми.

  2. Серверная логика (Backend - PHP/MySQL): Обрабатывает запросы от фронтенда, сохраняет данные макетов в базу данных и управляет файлами.

  3. Система конвертации: Компонент, который преобразует сохраненный макет в необходимые форматы для скачивания (SVGPNGPDFEPSCDR).

Рассмотрим подробнее лучшие инструменты для каждого из этих слоев.


🎨 Клиентская часть (Frontend)

Это мозг вашего редактора. Пользователь видит и взаимодействует с макетом именно здесь.

  • Fabric.js: Это, вероятно, ваш лучший выбор в качестве основы.

    • Что это? Мощная JavaScript-библиотека для работы с элементом ``. Она предоставляет объектную модель для векторных и растровых изображений.

    • Плюсы: Идеально подходит для создания графических редакторов, поддерживает сложные объекты, кривые Безье, слои, фильтры. Создана для интерактива.

    • Как использовать: Вы передаете в браузер пользователя HTML-страницу с Fabric.js. Он создает холст, а когда пользователь завершает работу, вы сериализуете состояние холста в JSON и отправляете на сервер через обычный PHP-скрипт.

  • Альтернативы:

    • Paper.js: Более ориентирован на векторную графику и кривые. Отлично подходит для сложного рисования пером, но порог входа выше, чем у Fabric.js.

    • Three.js: Используется только если вам нужна работа с 3D-объектами или сложными 3D-эффектами. Для 2D-дизайна это избыточно.


⚙️ Серверная часть (Backend - PHP)

Здесь хранятся пользовательские данные и управляется бизнес-логика.

  • Сохранение макетов:

    • При сохранении вы получаете от фронтенда JSON-строку (например, {"objects":[{"type":"rect", ...}]}).

    • Вы можете сохранить эту строку напрямую в базу данных MySQL в поле типа TEXT или JSON. Это самый быстрый и простой способ.

    • Альтернативно, вы можете генерировать и хранить на сервере SVG файлы, но JSON удобнее для последующего редактирования.

  • Библиотеки для работы с векторной графикой:

    • Imagick (PHP Extension): Это обязательное расширение для вашего сервера. Оно является оберткой над мощнейшей библиотекой ImageMagick, которая умеет читать, конвертировать и записывать изображения в более чем 100 форматах, включая SVG, PDF, EPS и множество растровых. Оно станет основой для вашей системы конвертации.

    • Alto\Bezier: Если вам нужна чисто PHP-библиотека для сложных математических операций с кривыми (оценка, разбиение, измерение), это отличный инструмент. Он идеально подходит для экспорта данных в SVG.


🖨️ Система конвертации (SVG/PNG/PDF/EPS/CDR)

Это самый сложный, но решаемый этап. Ожидать, что PHP на 100% нативно создаст файл .cdr, не приходится, поэтому стратегия строится на конвертации через другие форматы.

  • Схема конвертацииJSON (из базы) -> SVG -> (нужный формат)

    1. Из JSON в SVG: Это ваша первая и ключевая задача. Нужно написать PHP-скрипт, который берет JSON из базы данных и превращает его в чистый XML-код SVG-файла. Это можно сделать с помощью простых манипуляций со строками или специализированной библиотеки (например, norkunas/php-svg).

    2. Из SVG в PNG: Это делается через Imagick одной-двумя строками кода.

    3. Из SVG в PDF:

      • Вариант А (Простой): Использовать Imagick. Он тоже умеет конвертировать SVG в PDF.

      • Вариант Б (Качественный): Использовать Inkscape через командную строку (exec или shell_exec). Inkscape — это профессиональный векторный редактор, и его консольная версия дает очень качественный результат. Пример: inkscape input.svg --export-filename=output.pdf.

    4. Из SVG в EPS:

      • Здесь тот же выбор: либо Imagick, либо Inkscape.

    5. Из SVG в CDR (Самое сложное):

      • Честное решение: Конвертировать SVG -> PDF (как описано выше), а затем использовать сторонний сервис или API. Формат CDR является проприетарным (собственность Corel).

      • Возможные сервисы: Посмотрите в сторону API для конвертации документов, например, от Aspose или GroupDocs. У них есть облачные сервисы, которые могут преобразовать PDF или SVG в CDR. Это будет платным, но наиболее надежным решением.

      • Альтернатива: Можно попробовать через LibreOffice в headless-режиме, который может открывать SVG и экспортировать в другие форматы. Это может сработать, но результат с CDR не гарантирован и может быть нестабильным.


📦 Сторонние API для конвертации

Чтобы не изобретать велосипед для сложных форматов, можно использовать готовые облачные решения:

  • Aspose.Total / Aspose.PDF: Мощные коммерческие API, которые умеют создавать, редактировать и конвертировать PDF, а также работать с EPS.

  • GroupDocs.Conversion: Еще одно мощное коммерческое API для конвертации между множеством форматов, включая CDR.


Резюме и рекомендация

💎 Резюме и рекомендация

Для старта я бы рекомендовал следующий технологический стек:

  1. FrontendFabric.js.

  2. BackendPHP + MySQL.

  3. Серверные утилиты: Установить Inkscape и ImageMagick на сервер, подключить к PHP расширение Imagick.

  4. Стратегия конвертации:

    • Сначала реализовать конвертацию в SVGPNGPDF и EPS через Imagick (быстро, но есть риск потери качества).

    • Для премиум-качества конвертации в PDF и EPS настроить вызов Inkscape.

    • Конвертацию в CDR на начальном этапе исключить или реализовать через платное API (например, Aspose), так как это самая трудоемкая задача.

    • В будущем, при необходимости полностью контролировать процесс конвертации SVG в PDF/EPS и иметь ресурсы на разработку, можно рассмотреть использование Cairo в качестве единого бэкенда для рендеринга.

Надеюсь, эта подробная схема поможет вам сориентироваться.

Вам понравилась статья?
Read more
Умный Сайдбар

Умный Сайдбар

103 0 5.0 1
1 2
Категории: IT и программирование

🧲Умный Сайдбар — всегда рядом, но никогда не мешает

Мы полностью переработали поведение правой колонки, чтобы чтение статей стало максимально комфортным и естественным. Новый Smart Sticky‑сайдбар адаптируется под ваши действия и ведёт себя так, как вы ожидаете.

 

1. Как это работает

Естественная прокрутка

Когда вы просто читаете статью, сайдбар ведёт себя как обычный элемент страницы — прокручивается вместе с контентом, не фиксируется и не мешает.

Умное закрепление (Smart Sticky)

📉 При движении вниз

Когда вы прокручиваете страницу вниз и достигаете нижней границы сайдбара, он мягко фиксируется у нижнего края экрана.
Вы видите весь его контент — без внутренних полос прокрутки и без «матрешек».

📈 При движении вверх

Как только вы начинаете прокручивать страницу вверх:

  • сайдбар сразу «отлипает»
  • движется вверх вместе со страницей
  • когда его верхняя часть достигает видимой области — фиксируется у шапки

Поведение получается естественным и предсказуемым.

 

2. Главные преимущества

🖥 Использование всей полезной площади

Сайдбар больше не ограничен высотой экрана.
Даже если он длиннее вашего монитора — вы всё равно увидите его полностью при обычной прокрутке.

🧹 Никаких лишних скроллбаров

Мы убрали внутренние полосы прокрутки.
Остался только один — общий для всей страницы.

🧲 Плавность и стабильность

Сайдбар движется:

  • без рывков
  • без дрожания
  • без конфликтов с CSS‑sticky

Он ощущается как часть контента, а не как отдельный блок.

 

✨ Итог

Навигация стала:

  • целостной
  • современной
  • предсказуемой
  • удобной

Сайдбар всегда там, где вы ожидаете его увидеть — и никогда не перекрывает контент.

 

Вам понравилась статья?
Read more
PHP: лучшие практики и советы для начинающих

PHP: лучшие практики и советы для начинающих

34 2 3.0 0
1

PHP остается одним из самых популярных языков программирования для веб-разработки. В этой статье мы разберем основные принципы написания качественного PHP-кода и рассмотрим лучшие практики. Важно всегда использовать подготовленные запросы при работе с базами данных, чтобы избежать SQL-инъекций. Также следует правильно обрабатывать ошибки и использовать современные возможности языка. Не забывайте про валидацию пользовательских данных и санитизацию вывода. Эти простые правила помогут вам писать безопасный и поддерживаемый код.

Вам понравилась статья?
Read more