J'essaie simplement de trouver la définition correcte du modèle de référentiel.
Ma compréhension initiale était la suivante (extrêmement simplifiée)
- Séparer vos objets d'affaires de vos objets de données
- Normaliser les méthodes d'accès dans la couche d'accès aux données.
J'ai vraiment vu deux mises en œuvre différentes, et il n'y a pas d'exemples formels en ligne, ceux que j'ai vus sont rangés dans des livres.
Mise en œuvre 1 :
public Interface IRepository<T>{
List<T> GetAll();
void Create(T p);
void Update(T p);
}
public interface IProductRepository: IRepository<Product> {
//Extension methods if needed
List<Product> GetProductsByCustomerID();
}
Mise en œuvre 2 :
public interface IProductRepository {
List<Product> GetAllProducts();
void CreateProduct(Product p);
void UpdateProduct(Product p);
List<Product> GetProductsByCustomerID();
}
Remarquez que le premier est un Get/Update/GetAll générique, etc., le second est plus proche de ce que je définirais comme un "DAO".
Les deux partagent une extraction de vos entités de données. Ce qui me plaît, mais je peux faire la même chose avec un simple DAO. Cependant, la deuxième partie standardise les opérations d'accès, je vois de la valeur, si vous implémentez cela à l'échelle de l'entreprise, les gens connaîtront facilement l'ensemble des méthodes d'accès pour votre référentiel.
Ai-je tort de penser que la normalisation de l'accès aux données fait partie intégrante de ce modèle ? Si les deux sont corrects, pourquoi choisir la mise en œuvre 2 ?
Rhino a un bon article sur la mise en œuvre 1, et bien sûr MS a une vague définition et un exemple de mise en œuvre 2 est aquí .