# Unit of Work Pattern

> A design pattern that collects the changes of one use case and commits them together in a single transaction.

Record: `architecture:unit-of-work-pattern`
Kind: pattern
Layer: [Atomic Boundary](https://banes-lab.com/records/layer/atomic-boundary.md)
Severity: recommended
Scope: application service, persistence
Aliases: Unit of Work
Canonical: https://banes-lab.com/ontology#architecture-unit-of-work-pattern

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Transaction Boundary](https://banes-lab.com/records/architecture/transaction-boundary.md) and before [Consistency](https://banes-lab.com/records/architecture/consistency.md).

## Repair

- Refactored by: Introduce Unit of Work
- Detected by: multiple independent saves in one use case
- Violated by: unmanaged partial persistence
- Measured by: save coordination defects
- Enforced by: persistence conventions

## Requires

- [Transaction Boundary](https://banes-lab.com/records/architecture/transaction-boundary.md)

## Reinforces

- [Atomicity](https://banes-lab.com/records/architecture/atomicity.md)
- [Consistency](https://banes-lab.com/records/architecture/consistency.md)

## Enables

- [Coordinated Persistence](https://banes-lab.com/records/lexicon/coordinated-persistence.md)

## Conflicts with

- [Scattered Save Calls](https://banes-lab.com/records/lexicon/scattered-save-calls.md)

## In tension with

- [Repository Complexity](https://banes-lab.com/records/lexicon/repository-complexity.md)

## Tensions

- [Unit of Work Pattern / Repository Complexity](https://banes-lab.com/records/tension/repository-complexity-unit-of-work-pattern.md)

## Severity

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

## Category

- [Transactions / State / Concurrency](https://banes-lab.com/records/architecture-category/transactions-state-concurrency.md)

## Linked from

- [Node design](https://banes-lab.com/pag/guide/node-design.md)
- [Transactions / State / Concurrency](https://banes-lab.com/ontology/principles/architecture-category-transactions-state-concurrency.md)
- [Transactions / State / Concurrency](https://banes-lab.com/ontology/lexicon/lexicon-category-transactions-state-concurrency.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
