Pattern separating operations from object structures.

Boundary controlling access to internal implementation details.

Logic selecting which exceptions should be handled.

Common approach that appears useful but creates problems.

Layer hiding lower-level implementation details.

Severe runtime failure state requiring recovery or termination.

Reusable solution for organizing software architecture.

Software layer responsible for user-facing presentation.

Code responsible for recovering from failures.

General guideline for producing maintainable software designs.