intermediate

SOLID principles

Apply SOLID to keep responsibilities focused, extension points explicit, subtypes substitutable, interfaces small, and dependencies inverted.