Sigh.
L'ampio consenso sarà no; il livello aziendale e il controller/livello web dovrebbero essere mantenuti in modo diverso, perché sono preoccupazioni separate.
Il fatto è che sembri etichettare questa come una questione di "purezza contro realtà" che è incredibilmente miope e leggermente antipatica. Sfida anche il punto di porre la domanda; se non hai intenzione di considerare le opinioni che vengono presentate, allora perché sollecitarle?
È vero che separare le cose un po 'più attentamente in anticipo richiede uno sforzo più immediato, più tempo e, in definitiva, può costare un po' di più. È anche vero che potresti non essere in grado di percepire alcun beneficio immediato dal farlo. Tuttavia, una serie di storie di singhiozzo condivise da un numero enorme di programmatori per diversi decenni suggerisce che, ove possibile, la cosiddetta "purezza" riduce il dolore quando, cinque anni dopo la linea; Perbacco; devi davvero ridiscendere e fare un po 'di refactoring, e non è remotamente piacevole a causa di tutte le fessure attraverso le quali le tue responsabilità si stanno infiltrando.
Un modo leggermente migliore di immaginare i livelli di un'applicazione Web potrebbe essere la presentazione, l'interazione, le regole e i dati aziendali; da cima a fondo. I tuoi dati sono il database, l'accesso ai dati, ecc. E le regole aziendali impongono ulteriori vincoli su quei dati, gestiscono l'offerta, il calcolo, ecc.L'interazione quindi si dirama tra il livello di presentazione (che in pratica è l'interfaccia utente) e la logica aziendale, eseguendo i casi d'uso che guidano l'applicazione.
Fino a questo punto, l'interfaccia utente è irrilevante; non importa se l'utente inserisce, ad esempio, i dati dei clienti in un'applicazione della riga di comando o naviga in un modulo Web di più pagine con i dati memorizzati nella sessione. Diciamo che prendi quest'ultimo; attaccare un front-end web su di esso. Ora quello che ti interessa è scrivere codice relativamente semplice per gestire il recupero dei dati richiesti e presentarli all'utente. Il punto è, la tua applicazione web; il front-end, che è l'intera interfaccia utente; sessioni e tutto Solo nel momento in cui sei pronto a dire "hey, inseriamo i dati dei clienti nel database" vai e invoca quei livelli di servizio così amorevolmente creati, passando ogni bit di informazione che la tua applicazione web ha nascosto; l'input dell'utente, il nome dell'utente che effettua la modifica; tutta quella merda. E il tuo livello di servizio si occupa di esso. O, in alternativa, le femmine perché hai dimenticato un campo obbligatorio.
Poiché hai separato in modo pulito le cose, il coraggio della tua applicazione può, come altri hanno suggerito, essere rimodellato (o "preso in prestito") da utilizzare in qualsiasi altra applicazione, e il livello di servizio rimane, apolide, pulito, e pronto a gestire le cose. E fa la tua convalida, e così la tua convalida è costante ovunque. Ma non sa chi ha effettuato il login nel front-end web, o l'applicazione console, o l'applicazione rich client fancy in esecuzione su un terminale, e non gli interessa, perché quel dettaglio è importante solo per quelle applicazioni.
È necessario aggiungere una nuova regola di convalida? Nessun problema; fare in modo che il livello di servizio esegua la convalida e gestire i problemi dell'interfaccia utente secondo necessità più in alto nella catena. Hai bisogno di cambiare il modo in cui viene calcolato qualcosa? Cambia quello al livello aziendale. Nient'altro deve essere influenzato.
Grazie per tutte le risposte. La principale preoccupazione che ho notato è la capacità di "cambiare" il livello aziendale, se necessario. La mia app funzionerà SEMPRE sul web, quindi Session sarà SEMPRE pertinente, fino a quando la sessione sarà obsoleta, quindi non è una preoccupazione qui. – sarsnake
quindi nessun test unitario? – Robert
Stai dicendo che questa sarà sempre una pagina web è un dettaglio di implementazione ... non dovrebbe essere preso in considerazione nella progettazione. – CSharpAtl