Split Repository into Interface and Implementation
Motivation
A repository is a place in your domain layer where you can keep your entities/aggregates when you don’t need them. A typical implementation for repository is to store the aggregate’s data into a database. Database access is a technical detail that the domain layer should have no knowledge of. Thus, separate the definition of the repository (domain layer) from its implementation (infrastructure layer).
Mechanics
- Apply Extract Interface on the repository.
- Move the implementation to the infrastructure layer; keep the interface in the domain layer.
- Move all uses of the old repository to the new interface. Only the configuration of the dependency injection is allowed to know the repository implementation.