140 messaggi dal 26 febbraio 2007
Sto creando un'applicazione in cui aggiungo dei prodotti ad un ordine. Questi prodotti possono essere scelti da un menu che indica quali prodotti sono vendibili.

Presentation Layer
Verifico che dal client gli input arrivati siano corretti (Il prodotto deve avere i campi obbligatori, e la quantità deve essere >0)
Verifico che l'utente sia autnticato ed abbia i privilegi per effttuare l'ordine
Application Layer
Crea il prodotto chiamando il DomainLayer e se ci sono degli errori nei dati, ritorno l'errore al client
Domain Layer
Ho usato un approccio DDD basic (ovvero tutte le proprietà sono private e vengono modificate solo da function in modo da effttuare sempre controlli di validità sui dati)



Adesso devo implementare ulteriori controlli:
1) Verificare che il cliente non sia tra i cattivi pagatori
2) Verificare che nel magazzino siano disponibile le quantità dei prodotti
3) Verificare che il prodotto che sto cercando di aggiungere appartenga al menu del'utente

Mi stavo domandando dove è preferibile fare questi controlli.

Appliation Layer: Contiene tutti i services che in base alla business logic crea le entity e richiama il repository per poter aggiungere i prodotti e le altre entity in gioco nelle varie operazioni.


Punto 1: pensavo di chimare un services specifico che mi restituisce se il cliente è OK. Quindi il presentation layer chiamava il services e in caso positivo chiamava il services che si occupa di aggiunere il prodotto. Oppure è il services che aggiunge il prodotto che deve fare questo controllo (ma credo di violare la single reposnability)
Punto 2: se ne occuperà il services che deve aggiungere il prodotto al repository?
Punto 3: vale lo stesso discorso del punto 1?


Grazie
667 messaggi dal 13 novembre 2008
Contributi
ciao,
mia opinione personale, quindi sindacabile...
tutti i modelli di sviluppo andrebbero valutati in base a ciò che stai sviluppando, al tempo che hai a disposizione, al risultato da ottenere; quindi la risposta a
Mi stavo domandando dove è preferibile fare questi controlli

è: dipende

se decidi di applicare il modello alla lettera dovresti effettuare chiamate separate ad ogni service, ad es. per il punto 1
-->service verifica cliente
-->risposta
-->service che verifica quantità
-->risposta
-->service che aggiunge il prodotto
...ecc.

potresti però pensare di variare il modello per ottenere una soluzione, secondo me migliore e comunque accettabile; solo per fare un esempio si potrebbe aggiungere un BusinessLayer contenente un servizio che raccolti i dati, cliente, quantità, prodotto, chiami in cascata i services di sopra e produca la risposta desiderata. In questo modo lo strato Presentation farebbe un unica chiamata, lo strato Application continuerebbe ad assolvere ai principi del modello, ma avresti molta più flessibilità di sviluppo....
140 messaggi dal 26 febbraio 2007
teo prome ha scritto:
potresti però pensare di variare il modello per ottenere una soluzione, secondo me migliore e comunque accettabile; solo per fare un esempio si potrebbe aggiungere un BusinessLayer contenente un servizio che raccolti i dati, cliente, quantità, prodotto, chiami in cascata i services di sopra e produca la risposta desiderata. In questo modo lo strato Presentation farebbe un unica chiamata, lo strato Application continuerebbe ad assolvere ai principi del modello, ma avresti molta più flessibilità di sviluppo....



Si direi che è un'ottima soluzione, penso che sceglierò questa strada

Grazie :)
74 messaggi dal 17 maggio 2011
Mia personale esperienza, quindi decisamente opinabile eheheheh.
Io mi provo bene con un solo punto di ingresso, mi spiego meglio.
Presentation Layer acquisisce i dati ed effettua controlli sull'utente di autenticazione.
I dati vengono passati ad un solo metodo del Service Layer ad esempio AddProdotto.
Questo metodo qui contiene tutta la logica e controlli, percui valida i dati di input e tutte le eventuali business role ad esempio se è un cattivo pagatore.
La verifica del cattivo pagatore viene effettuata dal CustomerService che è una dipendenza del OrderService (atto ad aggiungere prodotti all'ordine).
140 messaggi dal 26 febbraio 2007
Praticamente uno UseCase che incorpora tutte le chiamate ai service. (quindi anche te confermeresti quanto detto da teo prome)

Effettivamente in questo modo se dovessi cambiare la logica, a tutti i miei client\presentation questa modifica sarebbe trasparente e cambierei un un'unico punto

grazie mille
74 messaggi dal 17 maggio 2011
Si praticamente quanto descritto nel secondo suggerimento.
Io personalmente mi trovo bene.

Il problema è che questo approccio è molto verboso, e non lo uso sempre.
Spiego meglio.

Sto sviluppando il controller della mia entity, in prima battuta gestisco tutto nel controller che implementa il context o meglio lo unitOfWork che mi restituisce il repository che mi serve.

Se nello sviluppo di un nuovo controller, devo gestire un check effettuato nella precedente entity, allora creo il service della 1° entity, modifico il precedente controller per chiamare il service e sviluppo il nuovo controller.
140 messaggi dal 26 febbraio 2007
Tutto chiaro, grazie mille per la spiegazione

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.