2009-03-21 9 views
7

Sto utilizzando il pattern di repository (come gli esempi nel sito http://www.asp.net/mvc) in un'applicazione ASP.NET MVC. Ho due repository, uno chiamato CategoryRepository e un altro chiamato ProductRepository. Uso anche due servizi, CategoryService e ProductService per convalidare e chiamare i metodi dei repository. Ho bisogno di un elenco di categorie in ProductService, un metodo che ne restituisce uno già implementato in CategoryRepository. La mia domanda è, qual è il modo corretto per chiamare il metodo ListCategories che esiste in CategoryRepository da ProductService? Non voglio implementare un altro metodo ListCategories nel ProductRepository (filosofia DRY). Grazie.Metodi di chiamata tra repository - Modello di repository

risposta

4

Si consiglia di trasferire repository simili in un unico servizio. Pertanto, se si sta creando un'applicazione di e-Commerce, arrotolare ProductRepository, CategoryRepository ecc in qualcosa come CatalogService e farli ospitare tutti i repository correlati.

+1

+1. In generale questo ti lascia con servizi che sono suddivisi in business, non entità, linee. –

+3

Quindi cosa succede quando il servizio catalogo utilizza ProductRepo per aggiornare un prodotto e CategoryRepo per aggiornare una categoria in un unico metodo di servizio? Significa che le modifiche ProductRepo vengono eseguite in un'unica transazione e le modifiche CategoryRepo vengono eseguite in un'altra transazione? Ho sempre pensato che le operazioni di pronti contro termine fossero discrete a meno che non permettiate a ProductRepo di cambiare anche le categorie. Cosa fanno le persone nel mondo reale? – IanT8

3

Un'opzione consiste nel fornire alla classe ProductService un'istanza di CategoryService.

public class ProductService { 
    ICategoryService _categoryService = null; 

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

È quindi possibile accedere alla lista delle proprietà categoria dal ProductService senza dover stabilire un accoppiamento diretto a qualsiasi applicazione specifica CategoryService.

Problemi correlati