Come dividere un livello di servizio

1

Al momento ho quattro progetti nella soluzione del mio sito web:

Project.Data
Questo contiene l'oggetto DbContext di EntityFramework e anche i repository che interagiscono con esso. Fa riferimento a Project.Models .

Project.Models
Questo contiene gli oggetti business e non fa riferimento a nessun altro progetto

Project.Web
Questo contiene tutti i ViewModels, Views, Controllers e il contenuto statico del sito web. Fa riferimento a Project.Data (per i repository), Project.Models e Project.Service

E ora arrivo al progetto del problema ...

Project.Service
Voglio che questo sia il progetto che Project.Web usa per rendere magri i suoi controllori, poiché capisco che sia desiderabile.

Ciascuna delle classi in questo progetto avrà probabilmente un repository iniettato in modo che possano accedere ai dati di cui hanno bisogno. Una delle loro responsabilità sarà quella di creare un ViewModel per i controller in Project.Web da utilizzare. Ciò significa che farà riferimento a Project.Data per un riferimento a quei repository, Project.Models per i modelli e Project.Web per l'accesso a i ViewModels.

Così come ho la sensazione che sto facendo qualcosa di veramente sbagliato da tutto questo, vado ad aggiungere il mio ultimo riferimento a Project.Web da Project.Service e si sbaglia dicendo che ora ho una dipendenza circolare ...

Che cosa esattamente sto facendo di sbagliato qui? Ci sono schemi che posso usare per ripulire alcune dipendenze da altri progetti o sto cercando di fare qualcosa che non è utile comunque?

    
posta ajbeaven 07.05.2013 - 16:46
fonte

1 risposta

1

Penso che quello che stai cercando di creare sia:

Data => Services => Controller | VM => View

Ma ciò che stai configurando non si presta a questo.

Come sottolinea Jimmy Hoffa, devi pensare ai tuoi punti finali. Non mi è chiaro esattamente quali ruoli intendi con i tuoi nomi di progetti esistenti. Quindi fornirò la mia risposta usando descrittori leggermente diversi. Collega i tuoi progetti in modo appropriato.

Il tuo Data Access Layer (DAL) è un endpoint, come le tue Views.

Le viste faranno riferimento al Controller | Progetto ViewModel.

Controller | Il progetto VM farà riferimento al progetto del tuo modello e / o dei servizi. Quale (i) dipende dalla tua terminologia.

Se hai un modello, farà riferimento al tuo progetto di servizio.

Infine, il progetto Servizi farà riferimento al tuo DAL.

    
risposta data 07.05.2013 - 17:14
fonte

Leggi altre domande sui tag