Structure code so that business logic is independent of frameworks, UI, and external details. Use when organizing larger codebases, defining layer boundaries, or fighting framework lock-in.