Le Repository Pattern (ou patron de dépôt en français) est un design pattern très utilisé en C# et en architecture d'applications (ex. ASP.NET) pour séparer la logique d'accès aux données de la logique métier.
📦 Définition simple
Le Repository Pattern agit comme une interface entre l’application et la source de données. Il centralise toute la logique de lecture/écriture afin que les composants de l’application (ex. contrôleurs, services) n’aient pas à interagir directement avec la base de données.
🎯 Pourquoi l'utiliser ?
✅ Séparation des responsabilités
✅ Réutilisabilité du code d'accès aux données
✅ Testabilité (plus facile à mocker pendant les tests)
✅ Centralisation de la logique de requête
🧩 Exemple en C# (simplifié)
Imaginons une entité Product
.
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
1. Interface IProductRepository
public interface IProductRepository
{
Product GetById(int id);
IEnumerable<Product> GetAll();
void Add(Product product);
void Delete(int id);
}
2. Implémentation concrète
public class ProductRepository : IProductRepository
{
private readonly List<Product> _products = new List<Product>();
public Product GetById(int id) => _products.FirstOrDefault(p => p.Id == id);
public IEnumerable<Product> GetAll() => _products;
public void Add(Product product) => _products.Add(product);
public void Delete(int id)
{
var product = GetById(id);
if (product != null)
_products.Remove(product);
}
}
3. Utilisation dans le service
public class ProductService
{
private readonly IProductRepository _repository;
public ProductService(IProductRepository repository)
{
_repository = repository;
}
public void CreateProduct(string name)
{
var product = new Product { Id = new Random().Next(1, 1000), Name = name };
_repository.Add(product);
}
}
🧪 Bonus : pourquoi c’est utile pour les tests ?
Dans un test unitaire, on peut facilement simuler le repository :
var mockRepo = new Mock<IProductRepository>();
mockRepo.Setup(r => r.GetAll()).Returns(new List<Product> { new Product { Name = "Test" } });
var service = new ProductService(mockRepo.Object);
🔁 Variante avec Entity Framework
Quand on utilise Entity Framework, le DbContext
agit déjà comme un repository, donc certains projets modernes préfèrent ne pas rajouter une couche supplémentaire sauf si elle est justifiée.
Aucun commentaire:
Enregistrer un commentaire