Глоссарий

Словарь веб-разработчика

Визначення технічних термінів з PHP, DevOps, MySQL та AI — з прикладами коду та поясненнями простою мовою.

228 терминов
46 букв
D
DDoS атака
DDoS (Distributed Denial of Service) — атака, посылающая настолько большой объём трафика из множества источников (ботнет), что сервер не может обрабатывать легитимные запросы и становится недоступным. Уровни атак L3/L4 (сетевой/транспортный) — флуд UDP/TCP пакетами. Цель: насыщение канала. Защита: фильтрация на уровне провайдера L7 (прикладной) — HTTP-флуд: тысячи запросов к тяжёлым endpoint-ам. Сложнее обнаружить, так как похоже на легитимный трафик Защита CDN с DDoS-защитой — Cloudflare, AWS Shield поглощают атаку на edge-узлах Rate Limiting — ограничить количество запросов с IP CAPTCHA — для подозрительных сессий Geo-blocking — заблокировать регионы с аномальным трафиком Anycast — распределение трафика между датацентрами
Decorator Pattern
Decorator — паттерн, динамически добавляющий новый функционал объекту без изменения его класса. Оборачивает оригинальный объект и расширяет или изменяет его поведение, реализуя тот же интерфейс.Примерinterface Logger { log(string $msg): void; } class FileLogger implements Logger { ... } class TimestampLogger implements Logger { public function __construct(private Logger $inner) {} public function log(string $msg): void { $this->inner->log(date('H:i:s') . ' ' . $msg); } }Преимущества перед наследованиемДекораторы комбинируются динамически: new JsonLogger(new TimestampLogger(new FileLogger())). Наследование потребовало бы N² подклассов для каждой комбинации. Декораторы избегают нарушения Open/Closed, типичного при наследовании.
Dependency Injection
Dependency Injection (DI) — паттерн, при котором объект получает свои зависимости извне, а не создаёт их сам. Вместо new Mailer() внутри класса — Mailer $mailer в конструкторе. Класс лишь объявляет, что ему нужно.Почему это важноКласс, который сам создаёт зависимости, жёстко привязан к их конкретным реализациям. DI позволяет подменять реализации — например, в тестах заменить реальный почтовый клиент на фейковый — без изменений в коде класса.IoC-контейнерБольшинство фреймворков имеют встроенный контейнер, который автоматически резолвит зависимости: читает конструктор класса, находит зарегистрированные реализации интерфейсов и передаёт их. Вы описываете «что нужно» — контейнер решает «где это взять».Три способа инъекцииConstructor injection — наиболее распространён, зависимости обязательныSetter injection — зависимость опциональна, передаётся через методInterface injection — класс реализует интерфейс, через который получает зависимость
DNS
DNS (Domain Name System) — «телефонная книга» интернета: преобразует доменные имена (example.com) в IP-адреса. Браузер не знает, где физически находится сайт — DNS указывает адрес.Типы записейA — домен → IPv4 (93.184.216.34)AAAA — домен → IPv6CNAME — псевдоним; один домен → другой доменMX — почтовые серверы для доменаTXT — произвольный текст: SPF, DKIM, подтверждение владенияКак происходит разрешениеБраузер запрашивает локальный DNS-резолвер → рекурсивный резолвер провайдера → корневой сервер → TLD-сервер (.com) → авторитетный сервер домена → IP-адрес. Весь путь занимает десятки миллисекунд и кешируется на TTL.TTLTime To Live — время кеширования записи. Перед изменением A-записи уменьшите TTL до 300 секунд, сделайте изменения, затем верните назад. Это минимизирует время сбоя при переезде.
Docker
Docker — платформа контейнеризации, которая упаковывает приложение вместе со всеми зависимостями в изолированный контейнер. Контейнер одинаково работает на ноутбуке разработчика, CI-сервере и продакшне — устраняя классическое «у меня же работает».Контейнер vs Виртуальная машинаVM эмулирует полноценное железо с отдельным ядром ОС — тяжело и медленно стартует. Контейнер использует ядро хоста, изолируя только процессы и файловую систему. Запуск контейнера — секунды, а не минуты.Ключевые концепцииImage — неизменяемый снимок файловой системы, собранный из DockerfileContainer — запущенный экземпляр imageDockerfile — инструкция для сборки: базовый образ, копирование файлов, командыDocker Compose — запуск нескольких контейнеров (app + db + redis) одной командойVolume — постоянное хранилище данных вне контейнера
Docker Compose
Docker Compose — инструмент для запуска многоконтейнерных приложений через один YAML-файл (compose.yaml). Одной командой поднимает весь стек: приложение, БД, Redis, очередь — каждый в своём контейнере с правильными связями. Базовая структура services: app: build: . ports: ["8080:80"] depends_on: [db, redis] environment: DB_HOST: db db: image: mysql:8.4 volumes: [db-data:/var/lib/mysql] environment: MYSQL_ROOT_PASSWORD: secret redis: image: redis:alpine volumes: db-data: Ключевые команды docker compose up -d — запустить в фоне docker compose down — остановить и удалить контейнеры docker compose logs -f app — следить за логами docker compose exec app bash — зайти в контейнер
DOM (Document Object Model)
DOM — объектное представление HTML-документа в виде дерева узлов. Браузер строит DOM из HTML и предоставляет JavaScript API для чтения и изменения структуры, стилей и контента страницы.Дерево узловhtml ├── head │ └── title └── body ├── h1 └── pОсновные операции// Найти элемент const el = document.querySelector('.card'); // Изменить контент el.textContent = 'Hello'; // Добавить класс el.classList.add('active'); // Обработчик события el.addEventListener('click', () => console.log('clicked')); // Создать элемент const btn = document.createElement('button'); document.body.appendChild(btn);Virtual DOMReact и другие фреймворки строят Virtual DOM — лёгкую копию DOM в памяти. При изменениях сравнивают новое и старое дерево (diffing) и обновляют только изменившиеся узлы. Это быстрее прямой манипуляции DOM.
Domain Events (Доменные события)
Domain Event — факт, произошедший в бизнес-домене: OrderPlaced, PaymentFailed, UserRegistered. Называется в прошедшем времени, так как описывает то, что уже произошло. Центральный концепт DDD и Event-Driven Architecture. Чем отличается от обычного события Техническое событие: ButtonClicked, FileUploaded. Доменное событие: InvoiceApproved, SubscriptionExpired — несёт бизнес-значение и является частью ubiquitous language. Зачем использовать Разъединить агрегаты — Order не знает о Notification Аудит и Event Sourcing — полная история изменений домена Асинхронная обработка побочных эффектов Пример class OrderPlaced { public function __construct( public readonly string $orderId, public readonly string $userId, public readonly Money $total, public readonly \DateTimeImmutable $occurredAt, ) {} } // После успешного сохранения: EventDispatcher::dispatch(new OrderPlaced($order->id, ...));
Domain-Driven Design (DDD)
DDD (Domain-Driven Design) — подход к разработке ПО, где центром является доменная модель: язык, концепты и правила бизнеса. Разработчики и доменные эксперты используют один язык (Ubiquitous Language). Код отражает реальный бизнес, а не структуру БД.Ключевые концепцииEntity — объект с уникальной идентичностью (User, Order)Value Object — объект без идентичности; равенство по значению (Money, Email)Aggregate — кластер объектов с одним корнем (Order + OrderItems)Repository — абстракция хранения агрегатовDomain Event — событие, произошедшее в домене (OrderPlaced)Bounded Context — граница, в которой модель и язык имеют однозначный смыслКогда оправданDDD добавляет сложность. Оправдан для сложных доменов с богатой бизнес-логикой. Для простых CRUD-приложений — избыточен.
DRY, KISS, YAGNI
Три принципа простого и поддерживаемого кода, которые часто нарушаются вместе и исправляются вместе.DRY — Don't Repeat YourselfКаждая единица знания должна иметь единственное, однозначное представление в системе. Дублирование кода означает, что изменение нужно вносить в нескольких местах — и одно неизбежно забудут. DRY — о знаниях, а не только о тексте: copy-paste плохо, но общая функция для двух разных концепций — тоже плохо.KISS — Keep It Simple, StupidПростейшее решение, которое решает задачу — лучшее. Сложный код трудно читать, тестировать и поддерживать. Сложность — враг.YAGNI — You Aren't Gonna Need ItНе реализуй функциональность, пока она действительно не нужна. Код, написанный «про запас», устаревает, захламляет кодовую базу и часто вообще не используется. Пишите для сегодняшних требований.
DTO (Data Transfer Object)
DTO (Data Transfer Object) — простой объект без логики, предназначенный исключительно для передачи данных между слоями приложения или между сервисами. Похож на структуру данных: только поля, никакого поведения.Зачем нуженИзолирует внутреннюю модель от внешнего API — изменение структуры БД не сломает ответ APIЯвно документирует, какие данные передаются между слоямиУдобен для валидации входных данных (Request DTO) и формирования ответов (Response DTO)Примерclass CreateUserDTO { public function __construct( public readonly string $name, public readonly string $email, public readonly string $password, ) {} }DTO vs Entity vs ViewModelEntity — объект доменной модели с идентичностью (есть в БД)DTO — контейнер для передачи без идентичностиViewModel — DTO специально для отображения в UI/шаблоне