Как можно было бы реализовать реализацию конвейерной архитектуры с точки зрения ООП?
Чтобы лучше объяснить себя:
Source -> Filter -> Filter -> Filter -> Sink
Допустим, у нас есть базовый класс с именем PipelineStage. Как реализовать фильтр, источник и приемник?
У меня есть 2 идеи:
С интерфейсами ISource и ISink
С подклассами Sink и Source из Filter
Источник и Раковина кажутся чрезмерными и усложняют общую структуру. Они не должны быть фильтрами.
Источник источник и это его функция. Если знает, где взять данные и как передать их в конвейер. Не заставляйте его быть чем-то другим, кроме источника.
То же самое о раковине.
Если вы хотите что-то проверить входные данные — добавьте дополнительный фильтр проверки.
пожалуйста, посмотрите на схему цепочки ответственности. Вы можете использовать шаблон строителя, чтобы построить цепочку, основанную на некоторых правилах, однажды собрав, инициируйте источник, он обрабатывает цепочку до конца (Sink). Проблема с разбитой цепью — обычное дело, но у вас все еще есть способ справиться с ней.