# High Cohesion

> The degree to which the members of a class or module work on the same data towards the same purpose.

Record: `architecture:high-cohesion`
Kind: quality-attribute
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: mandatory
Scope: class, module, component
Canonical: https://banes-lab.com/ontology#architecture-high-cohesion

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Do Not Repeat Yourself (DRY)](https://banes-lab.com/records/architecture/duplicate-code.md) and before [Low Coupling](https://banes-lab.com/records/architecture/low-coupling.md).

## Repair

- Refactored by: Extract Class, Split Module, Move Method
- Detected by: low LCOM, scattered dependencies, unrelated public API
- Violated by: unrelated methods, unrelated fields, unstable responsibility grouping
- Measured by: cohesion metrics, change locality
- Enforced by: module ownership, [architecture review](https://banes-lab.com/records/architecture/architecture-review.md)

## Requires

- [Single Responsibility Principle (SRP)](https://banes-lab.com/records/architecture/single-responsibility.md)
- [Explicit Boundaries](https://banes-lab.com/records/architecture/explicit-boundaries.md)

## Reinforces

- [Modularity](https://banes-lab.com/records/architecture/modularity.md)
- [Encapsulation](https://banes-lab.com/records/architecture/encapsulation.md)

## Enables

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

## Conflicts with

- [God Object](https://banes-lab.com/records/architecture/god-object.md)
- [Utility Dump](https://banes-lab.com/records/architecture/utility-dump.md)
- [Shotgun Surgery](https://banes-lab.com/records/architecture/shotgun-surgery.md)

## In tension with

- [Over-Specialization](https://banes-lab.com/records/lexicon/over-specialization.md)

## Tensions

- [High Cohesion / Over-Specialization](https://banes-lab.com/records/tension/high-cohesion-over-specialization.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)

## Linked from

- [Node design](https://banes-lab.com/pag/guide/node-design.md)
- [A system is a graph](https://banes-lab.com/software-architecture/model/a-system-is-a-graph.md)
- [Principles are typed](https://banes-lab.com/software-architecture/principles/principles-are-typed.md)
- [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)
- [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)
