2009-08-29 8 views
13

Come si implementa in genere un livello di servizio in un'architettura MVC? È un oggetto che serve tutte le richieste agli oggetti di business sottostanti? O è più simile a un oggetto che serve diversi oggetti di servizio che a loro volta interagiscono con oggetti di business?Implementazione di un livello di servizio in un'architettura MVC

Quindi:

  1. Controller -> Servizio -> getUserById(), oppure:

  2. Controller -> ServiceManager -> getUserService() -> getUserById()

Inoltre, se quest'ultimo è più appropriato, si configura questo oggetto ServiceManager in un bootstrap? In altre parole, registra i diversi servizi di cui avrai bisogno per la tua app al gestore servizi in un bootstrap?

Se nessuno dei precedenti è appropriato, cosa potrebbe aiutarmi a capire meglio come implementare un livello di servizio?

Grazie in anticipo.

risposta

4

Il modo in cui leggo questa domanda, ci sono davvero due cose che dovrebbero essere risposta:

A) Preferisco suddividere "Servizio" in "CustomerService" e "OrderService", in altre parole raggruppati per concetti di dominio.

B) In secondo luogo, userei l'iniezione di dipendenza per ottenere il servizio corretto direttamente dove ne ho bisogno, quindi sto fondamentalmente usando alt 1. L'astrazione aggiunta in alternativa 2 non fornisce alcun valore aggiuntivo per me, dal momento che il contenitore IoC fa la parte importante.

+0

Grazie per la tua risposta krosenvold. Per quanto riguarda la risposta: A) Capito e concordato B) Vedo quello che stai dicendo sull'astrazione ridondante. Ma come ho commentato a Joel: ho difficoltà a capire come l'IoC sarebbe implementato in un ambiente MVC. Dove si svolgerà questo? Nel controller? In che modo questo offre un valore aggiuntivo? Non penso di capire troppo bene il principio di IoC per coglierne i benefici. Oppure stiamo parlando di configurarlo anche in un bootstrap? Se ti piacerebbe elaborare (magari con un breve esempio) lo apprezzerei molto. Grazie. –

+0

Il concetto chiave per comprendere l'iniezione delle dipendenze è che per essere efficace sarà usato in * molti * posti. Solitamente si aggancia il contenitore IoC a un livello infrastrutturale molto basso e si diffonde ovunque. – krosenvold

2

Personalmente preferisco # 2, e sì, sarebbe generalmente configurato in un bootstrap, o le dipendenze sarebbero risolte usando una sorta di contenitore IoC per darti le concrete istanze concrete.

Vorrei anche commentare, e sì capisco che questo è probabilmente più di una preferenza personale. Cerca di evitare di usare il nome di livello "Servizio" per questi oggetti. fare riferimento a loro come repository o qualcos'altro. se usi il servizio, quel termine diventa sovraccarico ... perché gli sviluppatori sono come, "vuoi dire, un servizio di riposo o wcf?". credimi, lo abbiamo fatto con un progetto recente, e ci confondiamo continuamente quando parliamo di dove apportare modifiche al codice :-P

+0

Joel, grazie per la vostra risposta. Sono d'accordo con la tua obiezione a nominarlo Servizio. L'ho appena capito, ma in realtà mi sono accigliato un po 'su di me. Ma il concetto di livello mi ha attratto. Sto cercando di cogliere l'intero concetto di dipendenza da iniezione anche in questo momento, ma non mi è del tutto chiaro come funzioni. Potresti fornire un breve esempio di come funzionerebbe in un ambiente MVC? Voglio dire, dove dovresti iniettare cosa in un oggetto se dove parlare di oggetti utente di recupero, per esempio? Ho difficoltà a cogliere questo concetto. Grazie in anticipo. –

+0

fidati di me quando dico che capisco quando dici che stai provando a girare la testa intorno a ioc. mi ci è voluto un po 'per capire quando/dove usarlo :-) questa casella di commento è troppo piccola per essere veramente utilizzata, ma suggerirei di controllare la versione di lib di ninject (http://ninject.org/).i loro tutorial procedono passo dopo passo e iniziano a introdurre i concetti. per riassumere, si tratta di separare l'API dall'implementazione concreta. il tuo codice nel progetto mvc dovrebbe funzionare contro la tua API e non le tue implementazioni specifiche .... in questo modo puoi cambiarle in un secondo momento durante il test dell'unità –

+3

Secondo Martin Fowler, un livello di servizio "definisce il limite di un'applicazione con un livello di servizi che stabilisce una serie di operazioni disponibili "In linea di app biz queste operazioni sono in genere CRUD, ma non sempre. Quindi non credo che Service Layer = repository. Come un vero livello di servizio (che adoro) si adatti a MVC è ancora un mistero per me. Il mio istinto è che la M in MVC dovrebbe essere sostituita con una S. A meno che i controller non formino il livello di servizio di cui sto parlando? Immagino che sia così che la maggior parte della gente lo fa. Ma i controllori dovrebbero definire i limiti dell'applicazione? Sono confuso ... –

Problemi correlati