# Iterator Pattern

Record: `arch:iterator-pattern`
Kind: pattern
Layer: [Design Patterns Core](https://banes-lab.com/records/layer/design-patterns-core.md)
Severity: contextual
Scope: behavior, traversal, collection
Canonical: https://banes-lab.com/ontology#arch-iterator-pattern

## Repair

- Refactored by: Introduce Iterator
- Detected by: index/pointer traversal of another type's internals
- Violated by: callers walking a structure's internal fields directly
- Measured by: internal-structure access count
- Enforced by: [design review](https://banes-lab.com/records/arch/design-review.md)

## requires

- [Uniform Traversal Interface](https://banes-lab.com/records/lex/uniform-traversal-interface.md)

## reinforces

- [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)
- [Single Responsibility Principle (SRP)](https://banes-lab.com/records/arch/single-responsibility.md)

## enables

- [Structure-Agnostic Iteration](https://banes-lab.com/records/lex/structure-agnostic-iteration.md)
- [Lazy Traversal](https://banes-lab.com/records/lex/lazy-traversal.md)

## conflicts-with

- [Exposed Internal Representation](https://banes-lab.com/records/lex/exposed-internal-representation.md)

## tensions-with

- [Simplicity](https://banes-lab.com/records/lex/simplicity.md)

## tensions

- [Iterator Pattern Simplicity](https://banes-lab.com/records/tension/iterator-pattern-simplicity.md)
