What is a Repository?
A Repository is an abstraction that mediates between the domain layer and the data mapping layer. It provides a collection-like interface for accessing domain aggregates while hiding the complexity of database operations.Why Use Repositories?
Domain Isolation
Domain code stays free of persistence concerns
Testability
Easy to mock or use in-memory implementations for testing
Flexibility
Switch databases or ORMs without changing domain code
Consistency
Centralized place for query logic and data access patterns
Repository Types
The library provides several base classes for different use cases:Repository (Full CRUD)
Complete read and write operations:ReadRepository
Read-only operations (useful for CQRS read models):WriteRepository
Write-only operations:Implementing a Repository
Step 1: Define Your Aggregate
Step 2: Create Mappers
Mappers transform data between domain models and persistence format:Step 3: Implement Repository
Here’s a database-agnostic implementation skeleton:For complete implementations with specific ORMs, see:
- Prisma Integration - Full-featured adapter with change tracking
- TypeORM Integration - Full-featured adapter with change tracking
- Drizzle Integration - Coming soon