Parece que cada ejemplo que encuentro del patrón de repositorio, la implementación es diferente de alguna manera. Los siguientes son los dos ejemplos que encuentro principalmente.Implementación del patrón de repositorio
interface IProductRepository
{
IQueryable<Product> FindAll();
}
No es entonces por lo general otra capa que habla con el repositorio y llama al método FindAll() y realiza las operaciones tales como la búsqueda de productos que comienzan con 's' o productos de ir a buscar la carta en una categoría en particular.
El otro ejemplo que encuentro mucho poner todos los métodos de búsqueda en el repositorio
interface IProductRepository
{
IEnumerable<Product> GetProductsInCategory(int categoryId);
IEnumerable<Product> GetProductsStartingWith(string letter);
IEnumerable<PromoCode> GetProductPromoCodes(int productId);
}
¿Qué ruta recomienda que me haga? ¿O cuáles son las ventajas/desventajas de unos a otros?
Según tengo entendido, habiendo leído http://martinfowler.com/eaaCatalog/repository.html ¿el primer enfoque parece reflejar mejor esto?
Gracias por la respuesta. Pensé que estabas destinado a agrupar por agregados? ¿Debería tener un repositorio por entidad? También aquí hay un ejemplo del primer ejemplo que proporcioné.http: // stackoverflow.com/questions/5049363/difference-between-repository-and-service-layer – Scott
Por agregado. No podía decir que los códigos promocionales eran solo para productos. (dado que se llamó 'GetProductPromos' y no solo' GetPromos') – jgauffin
no tiene su primera interfaz, ¿también 2 razones para el cambio? primero: cambiar el método FindForCategory para cambiar el Producto devuelto por defecto si no encuentra ningún producto por categoría de categoría pasada, y segundo cambiar el FindAllStartingWith para aplicar algunos filtros predeterminados? – Masoud