Добро пожаловать в эту серию статей об архитектуре разработки программного обеспечения. В этом выпуске мы будем изучать архитектуру каналов и фильтров.

Определение

Стиль архитектуры каналов и фильтров в программной инженерии определяется как система, состоящая из каналов и фильтров, а также источника данных и приемника данных.

Фильтры

Каждый отдельный фильтр системы имеет набор входов и выходов. Компонент фильтра будет считывать поток данных со своего входа и создавать данные со своего выхода. Обычно он применяет преобразование (функцию) к входным данным для получения желаемого результата.

Трубы

Канал в архитектуре — это соединитель, который служит исключительно каналом для потока данных, передавая данные от вывода/источника данных фильтра к входу/приемнику данных фильтра.

Источник данных и приемники данных

Источник данных относится к потоку данных, поступающих в систему, а приемник данных представляет собой конец системы или вывод.

Характеристики

Фильтры должны быть независимы друг от друга

Это жизненно важное соображение, потому что нам нужно гарантировать, что состояние фильтра не передается другому фильтру, чтобы любые эффекты или преобразования, которые фильтр оказывает на данные, были изолированы внутри него.

Повторное использование поддерживается

Благодаря своей конструкции любые два фильтра могут быть объединены для использования при условии, что они способны правильно передавать данные между собой. Это означает, что мы можем повторно использовать наши фильтрующие компоненты по всему конвейеру.

Легко расширяемый

Фильтры логически независимы от потока данных. Это гарантирует, что мы можем легко расширить систему, добавив новые фильтры в разные точки системы. Мы также можем легко заменить старые фильтры новыми, что позволит нам еще больше изменить поведение.

Примеры каналов и фильтров

Теперь, когда у нас есть общее представление о том, как выглядит архитектура каналов и фильтров, давайте рассмотрим некоторые реальные приложения для этой архитектуры.

Декодер видео

Видеодекодер является примером приложения, использующего эту архитектуру. Обычно присутствующая в пакетах видеокодеков, эта программа отвечает за считывание потока входных данных, обычно закодированных видеосигналов, а затем путем некоторого преобразования создает поток декодированных видеокадров.

Эти преобразования включают (но не ограничиваются): компенсацию движения, декодирование длины и т. д. Программа будет передавать видеосигнал с входа через различные этапы, где каждый фильтр представляет собой отдельный этап, применяющий определенное преобразование к сигналу по конвейеру, и затем в приемник данных для потребления пользователем.

Операторы оболочки Unix

Другим известным реальным приложением, которое активно использует эту архитектуру, будут операторы из оболочки unix. Используя оператор конвейера, пользователи могут объединять процессы, считывающие со стандартного ввода, и процессы, записывающие в стандартный вывод, в один поток. Это означает, что нам не нужно сохранять вывод программы перед отправкой его в другую программу, и, таким образом, мы можем работать быстрее в оболочке.

Example of unix pipeline:
wc -l *.pdb | sort -n | head -n 1

Приведенная выше команда формирует конвейер, в котором выходные данные команды wc -l *.pdb передаются в команду sort , а затем в команду head.

В этом сценарии легко увидеть, что такие команды, как wc, sort и head, действуют как фильтры, о которых мы упоминали ранее!

Итак, это краткое введение в архитектуру Pipe and Filter! Спасибо за чтение!