Ответ
Пайплайн (Pipeline) — это архитектурный паттерн, где обработка данных или запроса проходит через цепочку последовательных, изолированных этапов (стадий). Каждый этап получает входные данные, выполняет одну чёткую операцию и передаёт результат следующему этапу.
Аналогия из UNIX: cat log.txt | grep "ERROR" | sort | uniq -c
Преимущества:
- Принцип единой ответственности: Каждый этап делает одно дело.
- Гибкость и повторное использование: Этапы можно легко переставлять, добавлять или отключать.
- Тестируемость: Каждый этап тестируется изолированно.
- Потоковая обработка: Можно обрабатывать данные по частям (например, используя генераторы), не загружая всё в память.
Пример пайплаина для обработки CSV-файла на PHP:
// Этап 1: Чтение файла построчно (генератор экономит память)
function readCsvLines(string $filePath): Generator {
$handle = fopen($filePath, 'r');
while (($line = fgetcsv($handle)) !== false) {
yield $line;
}
fclose($handle);
}
// Этап 2: Фильтрация строк
function filterValidRows(Generator $lines): Generator {
foreach ($lines as $row) {
if (count($row) === 3 && !empty($row[1])) { // Простая валидация
yield $row;
}
}
}
// Этап 3: Преобразование данных
function normalizeRows(Generator $rows): Generator {
foreach ($rows as $row) {
[$id, $name, $email] = $row;
yield ['id' => (int)$id, 'name' => ucfirst(strtolower($name)), 'email' => trim($email)];
}
}
// Сборка и выполнение пайплаина
$pipeline = normalizeRows(filterValidRows(readCsvLines('data.csv')));
foreach ($pipeline as $processedItem) {
// Отправка $processedItem в базу данных или в следующий сервис
saveToDatabase($processedItem);
}
Использование: Конвейеры часто применяются в ETL-процессах, middleware-цепочках веб-фреймворков (например, в Laravel или Express.js) и конвейерах CI/CD.