2009-03-21 15 views
7

Estoy usando el patrón de repositorio (como los ejemplos en el sitio http://www.asp.net/mvc) en una aplicación ASP.NET MVC. Tengo dos repositorios, uno llamado CategoryRepository y otro llamado ProductRepository. También uso dos servicios, CategoryService y ProductService para validar y llamar a los métodos de repositorios. Necesito una lista de categorías en ProductService, un método que devuelve uno que ya está implementado en el CategoryRepository. Mi pregunta es, ¿cuál es la forma correcta de llamar al método ListCategories que existe en CategoryRepository desde ProductService? No quiero implementar otro método de Categorías de listas en el ProductRepository (filosofía DRY). Gracias.Métodos de llamada entre repositorios - Patrón de repositorio

Respuesta

4

Recomendaría hacer repositorios similares en un solo servicio. Por lo tanto, si está creando una aplicación de comercio electrónico, instale ProductRepository, CategoryRepository, etc. en algo así como CatalogService y haga que aloje todos los repositorios relacionados.

+1

+1. En general, esto te deja con servicios que se dividen en negocios, no en entidades, líneas. –

+3

Entonces, ¿qué sucede cuando el Servicio de catálogo usa el ProductRepo para actualizar un producto y el CategoryRepo para actualizar una categoría en un método de servicio? ¿Eso significa que los cambios de ProductRepo se realizan en una transacción y los cambios de CategoryRepo se realizan en otra transacción? Siempre pensé que las operaciones de reporto eran discretas a menos que permitiera que el ProductRepo también cambiara de categoría. ¿Qué hace la gente en el mundo real? – IanT8

3

Una opción es proporcionar a la clase ProductService una instancia de CategoryService.

public class ProductService { 
    ICategoryService _categoryService = null; 

    public ProductService(ICategoryService categoryService) { 
     _categoryService = categoryService; 
    } 
} 

A continuación, puede acceder a las listas de categorías de la ProductService sin tener que establecer un acoplamiento directo a cualquier aplicación específica CategoryService.

Cuestiones relacionadas