Domanda

So che questo può sembrare stupido, ma mi sto trovando difficoltà a comprendere la necessità di un livello di servizio e le sue differenze con livello di business.

Quindi, stiamo usando asp.net MVC 2 e hanno strato di accesso ai dati, che fa tutto l'interrogazione con il database e poi abbiamo lo strato di business che ha la logica di business e convalide doveva essere fatto. Infine abbiamo il livello di presentazione che ha praticamente tutti i punti di vista. In aggiunta abbiamo anche alcuni aiutanti, DTOs e classi ViewModel in diverse cartelle come parte delle nostre biblioteche. Ma ho cercato di leggere l'architettura e sembra che livello di servizio è una parte importante di un'architettura.

Tutto quello che capisco è che uno strato di servizio è qualcosa che chiama tutte le funzioni. Ma non posso davvero vedere la necessità di livello di servizio nella nostra applicazione? Oppure potrebbe essere già lì e non riesco a vederlo ... Qualcuno può spiegare con un esempio di come un livello di servizio è importante? Come è diverso da un livello di business perché da quello che ho letto sembra abbastanza simile? Se la sua nella prima necessaria a tutti? Tutto quello che cercando di fare è l'architetto nostra applicazione nel miglior modo possibile, quali sono i tuoi pensieri e le esperienze su di esso?

È stato utile?

Soluzione

E 'tutto sul disaccoppiamento vostra applicazione in sé pezzi contenuti, ognuno definito dalla necessità di fare un lavoro molto bene.

Questo consente di applicare modelli di progettazione specializzati e le migliori pratiche per ogni componente.

Ad esempio, il lavoro del livello di business è quello di implementare la logica di business. Punto. Esponendo un'API progettato per essere consumati dal livello di presentazione non è la sua "preoccupazione".

Questo ruolo del movimento tra il migliore viene eseguita da uno strato di servizio. Factoring fuori questo strato specializzato consente di applicare modelli molto più specializzati per ogni singolo componente.

Non c'è bisogno di fare le cose di progettazione in questo modo, ma l'esperienza accumulata della comunità indica che si traduce in una domanda che è molto più facile da sviluppare e mantenere perché non si sa esattamente ciò che ogni componente si prevede di fare, anche prima si inizia la codifica l'applicazione.

Ogni strato dovrebbe fare un lavoro molto bene. Il ruolo del go tra svolto dalla strato servizio è un tale lavoro ben definito e che è la ragione della sua esistenza: si tratta di un'unità di complessità che è stato progettato allo stesso modo più e più volte, invece di dover reinventare la ruota di volta in volta, da manipolare questo ruolo con la logica di business in cui non appartiene. Pensate al livello di servizio come componente di mappatura. È esterno alla logica di business e non appartiene nelle sue classi, o nei controllori sia.

Inoltre, come risultato di essere esclusi dal calcolo del logica di business, si ottiene oggetti di business più semplici che sono più facili da usare da altre applicazioni e servizi che la consuma "business".

ASP.NET MVC è nulla se non una piattaforma per consentire di scrivere le applicazioni come componenti specializzati.

Come risultato di questa crescente comprensione di come specializzarsi componenti, i programmi si stanno evolvendo da una ciotola di zuppa primordiale e spaghetti in qualcosa di diverso e strano. La complessità che possono affrontare, pur utilizzando strutture semplici, è in aumento. L'evoluzione è sempre in corso. Se la vita è tutto da seguire, questo deve essere buono, in modo da tenere la palla a rotazione.

Altri suggerimenti

Si potrebbe trovare il termine Architettura Astronaut interessante.

Il punto è, non farsi prendere in tutti questi "strati" che la gente Bandy circa. Ogni volta che hai avuto un altro strato alla domanda, ci deve essere uno scopo in esso.

Per esempio, alcune persone si combinano con successo i concetti di uno strato di accesso ai dati e della business logic in uno solo. Non è giusto per ogni soluzione, ma funziona perfettamente per molti di loro. Alcune persone potrebbero anche combinare Presentazione con Business ... che è un importante no no in un sacco di cerchi, ma, ancora una volta, può essere perfetto per il bisogno in questione.

In sostanza, il problema si sta risolvendo dovrebbe dettare la struttura dell'applicazione. Se altre applicazioni hanno bisogno di integrarsi con il vostro, poi uno strato di servizio potrebbe essere necessario aggiungere. Questo potrebbe assumere la forma di moduli web semplici che gli altri possono inviare dati a oppure potrebbe andare oltre ad essere pieno sui servizi web. Ci potrebbe anche essere situazioni in cui si desidera che il livello di servizio ad essere il go primaria posizione per più presentazioni.

È possibile ottenere così complicato come si vuole, ma una buona regola generale è quella di mantenere le cose semplici fino le complicazioni diventano necessari.

In alcuni disegni, il livello di servizio non viene utilizzato dal livello di presentazione.

Il livello di servizio è chiamato da altre applicazioni che desiderano utilizzare gli strati di business e di accesso ai dati nell'applicazione.

In un certo senso, il livello di servizio è un altro front-end separato dal livello di presentazione.

Vedere la architettonica schema qui. Gli utenti accedono all'applicazione attraverso lo strato di presentazione. E i sistemi esterni accedere all'applicazione attraverso lo strato di servizi. Il livello di presentazione e dei servizi strato di parlare con la facciata applicazione nel livello di business.

Per fare un esempio di quello che potrebbe essere quei altri "sistemi esterni", i servizi web e dei servizi WCF chiamare il livello di servizio. Qualche altra applicazione web potrebbe chiamare livello di servizio di questa applicazione in una chiamata di servizio web. Questo sarebbe un modo per garantire che entrambe le applicazioni stanno applicando la stessa logica aziendale, e che eventuali modifiche apportate alla logica aziendale si riflettono in entrambe le applicazioni.

Come Chris punti su Lively, uno non dovrebbe avere portato via con la creazione di strati. Suggerirei di creare solo gli strati che potrebbero essere utili nella vostra applicazione. Nella mia esperienza, la necessità di un livello di servizio non è frequente, ma la necessità di un livello di business è molto frequente.

Il livello di servizio è di solito costruito in termini di operazioni discrete che devono essere supportati per un cliente.

Per esempio, un livello di servizio può esporre Creazione di un account. Mentre lo strato di business può essere costituito da convalidare i parametri necessari per la creazione di un account, la costruzione di oggetti di dati per essere persistente, ecc.

Spesso, il livello di servizio utilizza un codice di procedura o uno stile Transaction Script per orchestrare il business e / o strati di logica.

Sapendo questo, si può capire che tuo Affari Livello è davvero un livello di servizio pure. Ad un certo punto, il punto da cui si sta facendo questa domanda essendo un tale punto, la distinzione è per lo più semantica.

Dal mio punto di vista di un livello di servizio permette di isolare la parte di presentazione dal vostro livello di business, allo stesso modo lo strato di accesso dati aziendali e ti isola da come ti ostini i dati.

All'interno del vostro livello di business che ci si mette le cose che sono fondamentale per la tua 'business'. A artificiosa (e probabilmente mal concepito esempio) sarebbe quello di avere che il luogo in cui dicono scontando i prezzi su un prodotto si verificano.

Il livello di servizio consente di separare ulteriormente l'interfaccia dal business. O anche di swap fuori altri strati di business a seconda degli scenari mutevoli del business.

Non tutte le applicazioni ha bisogno di uno, però (un sacco di variabili andare in quella determinazione), troppa l'architettura può introdurre complessità tua squadra non può avere bisogno.

Date un'occhiata a quello che dice Randy Stafford su Service Layer nella "P di EAA" Libro http://martinfowler.com/eaaCatalog/serviceLayer.html

  

Un servizio di livello definisce un   confine dell'applicazione [Cockburn Plop]   e il suo set di operazioni disponibili   dal punto di vista di interfacciamento   livelli client. racchiude il   logica di business dell'applicazione ,   le operazioni di controllo e   risposte nel coor-dinating   attuazione delle sue operazioni.

Semplice. Per esporre la logica di business a un cliente, utilizzare un livello di servizio. Chiedetevi:

Quando si cambia la logica di business, se il cambiamento livello di servizio? Se la risposta è "non sempre", allora è necessario un livello di servizio.

So che questo thread è vecchio, ma una cosa utile che ho fatto nello strato servizio è a transazioni manico (Business strato non dovrebbe aver bisogno di sapere come gestire rollback, ordine delle operazioni, ecc.).

Un'altra cosa che ho fatto è utilizzato per tradurre tra le entità di dominio e DTOs. Le offerte strato di business con il modello di dominio, ma ho superato la parte posteriore dei dati al livello di presentazione sotto forma di DTOs (in alcuni casi non era pratico di esporre l'intero modello di dominio per il livello di presentazione per vari motivi), in modo che il livello di servizio gestisce questa mappatura.

In definitiva, vedo lo strato di business come più grana fine, mentre il livello di servizio può essere più grossolana in quanto potrebbe chiamare più operazioni nel BLL e chiamate ordine all'interno di chiamata di un servizio.

Sì, e vorrei anche nota a che il livello di servizio è un buon posto per l'autenticazione, sia per il ruolo based e basata utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top