# Single Responsibility Principle

> A design rule that a class or module has one reason to change, because it serves one responsibility.

Record: `architecture:single-responsibility`
Kind: principle
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: mandatory
Scope: class, module, service
Aliases: SRP, Single Responsibility Principle (SRP)
Canonical: https://banes-lab.com/ontology#architecture-single-responsibility

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Immutable Infrastructure](https://banes-lab.com/records/architecture/immutable-infrastructure.md) and before [Separation of Concerns](https://banes-lab.com/records/architecture/separation-of-concerns.md).

## Repair

- Refactored by: Extract Class, Extract Module, Split Service, Move Method
- Detected by: high fan-in/fan-out, unrelated methods, unrelated dependencies
- Violated by: Mixed Responsibilities, Multi-Reason Change
- Measured by: cohesion score, responsibility count, change-coupling
- Enforced by: architecture tests, package boundaries, [static analysis](https://banes-lab.com/records/reasoning/technique-static-analysis.md)

## Requires

- [High Cohesion](https://banes-lab.com/records/architecture/high-cohesion.md)
- [Explicit Boundaries](https://banes-lab.com/records/architecture/explicit-boundaries.md)

## Reinforces

- [Separation of Concerns](https://banes-lab.com/records/architecture/separation-of-concerns.md)
- [Modularity](https://banes-lab.com/records/architecture/modularity.md)
- [Testability](https://banes-lab.com/records/architecture/testability.md)

## Enables

- [Replaceability](https://banes-lab.com/records/architecture/replaceability.md)
- [Reusability](https://banes-lab.com/records/architecture/reusability.md)

## Conflicts with

- [God Object](https://banes-lab.com/records/architecture/god-object.md)
- [Divergent Change](https://banes-lab.com/records/architecture/divergent-change.md)

## In tension with

- [Excessive Fragmentation](https://banes-lab.com/records/lexicon/excessive-fragmentation.md)

## Tensions

- [Single Responsibility Principle (SRP) / Excessive Fragmentation](https://banes-lab.com/records/tension/excessive-fragmentation-single-responsibility-principle-srp.md)

## Severity

- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)

## Category

- [Core Modular Design](https://banes-lab.com/records/architecture-category/core-modular-design.md)

## Enforced by

- [rules/eslint/file-length.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/file-length.eslint.rule.ts.md)

## Reinforced by

- [Domain Service](https://banes-lab.com/records/architecture/domain-service.md)
- [Interface Segregation Principle](https://banes-lab.com/records/architecture/interface-segregation.md)
- [Command Pattern](https://banes-lab.com/records/architecture/command-pattern.md)
- [Chain of Responsibility Pattern](https://banes-lab.com/records/architecture/chain-of-responsibility-pattern.md)
- [Iterator Pattern](https://banes-lab.com/records/architecture/iterator-pattern.md)
- [Pipes and Filters](https://banes-lab.com/records/architecture/pipes-and-filters.md)

## Linked from

- [The structural domain](https://banes-lab.com/software-architecture/principles/the-structural-domain.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Domain Architecture](https://banes-lab.com/ontology/principles/architecture-category-domain-architecture.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md)
- [Behavioral Patterns](https://banes-lab.com/ontology/principles/architecture-category-behavioral-patterns.md)
- [Codebase / System Architecture Styles](https://banes-lab.com/ontology/principles/architecture-category-codebase-system-architecture-styles.md)
- [Core Modular Design](https://banes-lab.com/ontology/lexicon/lexicon-category-core-modular-design.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
