Глосарій
Словник веб-розробника
Визначення технічних термінів з 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/шаблоні