Het Repository-patroon encapsuleert de logica voor toegang tot de gegevensbron (DB, API, enz.), en biedt een abstractielaag tussen de domeinlogica en het opslagsysteem. Het belangrijkste doel is om de implementatiedetails van opslag te verbergen en te zorgen voor interactie met de collectie van objecten in het domein.
Voordelen:
Codevoorbeeld in C#:
public interface IUserRepository { User GetById(int id); void Add(User user); } public class UserRepository : IUserRepository { private readonly DbContext _context; public UserRepository(DbContext context) { _context = context; } public User GetById(int id) => _context.Users.Find(id); public void Add(User user) => _context.Users.Add(user); }
Kernkenmerken:
Moet een Repository weten van de database-structuur?
Nee. Een Repository moet werken met domeinobjecten en de details van opslag verbergen. Een aparte Data Access Layer houdt zich bezig met de mapping naar het DB-schema.
Mag je bedrijfslogica mengen binnen een repository-klasse?
Nee. Dit schendt de Separation of Concerns: de Repository is alleen verantwoordelijk voor het ophalen/opslagen van gegevens. Bedrijfslogica moet worden ondergebracht in services/domeinobjecten.
Zijn Repository en DAO hetzelfde?
Niet helemaal. DAO is orthogonaal aan het Repository-patroon, werkt op tabel- en recordniveau, terwijl de Repository werkt met objecten van bedrijfslogica. De Repository abstraheert collecties van bedrijfsentiteiten, terwijl DAO dichter bij de infrastructuur staat.