Dependency Inversion
A module you work is designed in a way it consist on several logical layers with clear responsibilities. The common design following the domain model pattern or port and afapters pattern could use following layers:
- Application layer
- Domaim layer
- Domain model
- Services
- Repositories
- Infrastructure integration layer
- Persistenve
- Messaging
If you need to keep the Domain layer independed from Infrastructure layer (domain logic tests should not require technology components like concrete database or message broker), how do you design Repositories?

Recommendation
We should make our classes rely on properties in our interfaces instead of relying on each other. The implications of violating this principle would result in a rigid system where testing blocks of code independently would be very difficult, reusability of code would be near impossible, and the addition or removal of code would lead to further complexity of the system and introduce bugs.