Глосарій

Словник веб-розробника

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

228 термінів
47 літер
D
DDoS атака
DDoS (Distributed Denial of Service) — атака, що надсилає настільки великий обсяг трафіку з багатьох джерел (ботнет), що сервер не може обробляти легітимні запити і стає недоступним. Рівні атак L3/L4 (мережевий/транспортний) — flood 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 — інструкція для збірки image: базовий образ, копіювання файлів, команди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Найпростіше рішення, що вирішує задачу — найкраще. Складний код важко читати, тестувати і підтримувати. Complexity is the enemy.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/шаблоні