Iterator — последовательный обход структуры без раскрытия её устройства
Iterator обеспечивает единый способ обхода элементов коллекции или сложной структуры данных, не раскрывая внутреннее устройство. Паттерн позволяет клиентскому коду работать с разными структурами единообразно.
Iterator отделяет логику обхода от структуры хранения, что упрощает расширение и изменение внутренней организации данных.
Паттерн широко используется в коллекциях, потоковой обработке, API итерации, обходе деревьев, интеграционных конвейерах и моделях данных.
Iterator — один из тех паттернов, которые незаметно присутствуют во всех современных системах. Он лежит в основе структуры коллекций, потоков данных, чтения файлов, обхода графов и любых агрегатов, где требуется последовательная обработка элементов без знания внутреннего устройства коллекции.
Главная идея Iterator
Iterator позволяет:
-
пройти по всем элементам структуры;
-
не зная, как эта структура устроена внутри;
-
единым способом работать с разными структурами;
-
менять структуру хранения без изменения логики обхода.
Iterator полностью отделяет доступ к элементам от структуры хранения.
Где Iterator применяется в архитектуре
1. Коллекции и структуры данных
Каждая коллекция должна иметь возможность:
-
пройтись по элементам,
-
не раскрывая свою внутреннюю реализацию.
Список, стек, очередь, дерево, граф — всё может иметь свой итератор.
2. Потоки данных (stream processing)
Iterator является основой:
-
стримов,
-
ленивых вычислений,
-
итераторов в Python,
-
генераторов в JavaScript,
-
реактивных потоков (где элемент приходит по событию).
3. Обход деревьев
Visitor и Iterator часто работают вместе:
Iterator обходится за последовательность, Visitor определяет логику обработки.
Используется в:
-
AST,
-
деревьях JSON/XML,
-
деревьях файловой системы,
-
древовидных моделях.
4. Агрегаты DDD
Если агрегаты содержат коллекцию вложенных сущностей, Iterator позволяет работать с ними последовательно без раскрытия внутренней модели.
5. Хранилища документов и БД
Iterator — основа cursor-based доступа:
-
курсоры MongoDB,
-
итераторы JDBC/SQL,
-
сканеры в column-store базах,
-
постраничный обход больших выборок.
6. ETL и интеграционные пайплайны
Процесс обработки:
-
читать → преобразовывать → фильтровать → отправлять
может быть построен как цепочка итераторов.
Преимущества Iterator
1. Инкапсуляция
Клиентский код знает только интерфейс итератора.
2. Унификация
Один и тот же код работает с разными структурами данных.
3. Гибкость
Можно менять структуру хранения внутри объекта, не трогая логику обхода.
4. Поддержка ленивых последовательностей
Iterator позволяет работать с большими данными по частям.
5. Простота расширения
Можно создавать новые алгоритмы обхода без изменения структуры.
Недостатки
-
необходимость следить за актуальностью итератора при изменении структуры;
-
возможная сложность реализации для графов и разветвленных структур;
-
риск неоптимального обхода, если итератор реализован плохо.
Но эти сложности архитектурно решаются через иммутабельность, безопасные курсоры и event-driven обход.
Iterator в российских учебниках
Iterator рассматривается как базовый механизм доступа к структурам данных и последовательностям, включая:-
обход коллекций,
-
обработку хранилищ документов,
-
реализацию потоковых операций,
-
cursor-based API в СУБД,
-
логику обхода структур BPMN и UML.
Почему архитектор должен знать Iterator
Архитектор обязан понимать механизмы последовательной обработки, потому что:
-
многие API работают на итераторах;
-
обработка данных и интеграции используют потоки;
-
алгоритмы фильтрации и трансформации построены как цепочки итераторов;
-
коллекции в доменной модели должны быть безопасными и предсказуемыми;
-
большие данные невозможно загрузить целиком — нужен ленивый обход.
Iterator — это фундаментальная концепция, скрытая практически везде.