Oggetto che deve essere utilizzato dal livello di servizio

2

Il mio progetto ha un livello di interfaccia utente, un livello di servizio e un livello di repository. Quest'ultimo ha oggetti Entity come parte dell'ORM (.net Entity Framework).

Il servizio in seguito restituisce un Dto al livello dell'interfaccia utente.

La mia domanda è quale oggetto dovrebbe funzionare il livello di servizio? Devo restituire le Entità ai miei metodi del livello di servizio per l'esecuzione di calcoli di business logic.

    
posta John Steed 23.09.2017 - 02:14
fonte

2 risposte

1

Dai un'occhiata a "Clean Architecture" di Bob Martin: link

Solo per riassumere: le regole aziendali della tua applicazione devono essere verificabili senza il database, l'interfaccia utente o qualsiasi altro fattore esterno. Pertanto, se le tue Entità espongono cose relative al database, allora forse il tuo progetto potrebbe essere migliorato.

My question is what object should the service layer work with? Should I return the Entities to my service layer methods for performing business logic calculations.

Se le entità sono parte del livello del repository, non dovrebbero essere restituite dall'applicazione (che è rappresentata dal livello dei servizi). La tua applicazione deve funzionare come un'unica unità ed essere testabile. Quindi, definisci gli oggetti appropriati da dichiarare nel livello Services e restituiscili a qualsiasi client possa utilizzare la tua app.

    
risposta data 29.09.2017 - 19:10
fonte
1

Segui il modello "Functional Core, Imperative Shell". Questa è l'essenza di tutta l'architettura moderna incluso "Clean" di Uncle Bob, l'architettura di Onion e cose come l'architettura di Elm.

Secondo questo modello il tuo livello di servizio, il nucleo della tua app, avrà tutta la logica della tua app ma nessuno degli effetti collaterali. Questo renderà il tuo livello di servizio molto facile da testare, non sono necessari stub, mock o test double.

Se i tuoi oggetti Entity possono essere costruiti indipendentemente dall'ORM, allora va bene usarli nel tuo livello di servizio, altrimenti dovrai creare alcuni tipi "Plain Old Data" per passare al livello di servizio.

Alcune risorse:

risposta data 29.12.2017 - 01:33
fonte

Leggi altre domande sui tag