Mi piace dove stai andando con questa curiosità, quindi vado a far apparire qualcos'altro che vedo.
Per seguire non solo "Separation of Concerns", ma anche "Persistence Ignorance", è quasi sempre un'Idea molto cattiva per consentire al tuo strato UI di chiamare nel tuo business / data side con un "Get All" (O anche chiudi) metodo. Mi rendo conto che potrebbe esserci un vincolo o due come Where UserId == LoggedInUser
, ma è ancora troppo vicino.
La ragione è che, all'improvviso, hai sviluppatori UI intelligenti che utilizzano il metodo "Ottieni tutti" e eseguono la logica di business / accesso ai dati sull'interfaccia utente per separare le informazioni, selezionare e filtrare, ecc.
Anche se dici a te stesso che non succederà mai, o che sarai l'unico nei prossimi 100 anni a toccare questo codice e Prometti a te stesso non lo farai mai, tu ancora non dovrebbe aprire l'interfaccia utente a tale potenza.
Ora immagina che in futuro un singolo Controllo dell'interfaccia utente debba visualizzare SEMPRE i biglietti con risposta (o in attesa). Cosa fai adesso? Devi "Ottenere tutti" ed eseguire la logica di filtraggio nell'interfaccia utente?
Non l'avrei nemmeno inserito nella Business Logic. Si tratta della separazione dei dati. Dovresti avere query più limitate possibili nel tuo livello di accesso ai dati ed esporre solo i risultati richiesti alla tua business logic. La tua logica aziendale in questo caso potrebbe essere solo un wrapper per restituire un risultato di accesso ai dati, ma va bene. È responsabilità della BLL determinare l'oggetto Persistenza e instradare le chiamate.
Ora, se hai bisogno di un elenco sul lato dell'interfaccia utente che mostri "Tutti" i ticket per un utente, potrebbe essere prudente avere il metodo "Ottieni tutto" in cui l'unico filtro è l'ID utente. Tuttavia, potrebbe essere più prudente combinare le query in sospeso e quelle con risposta. Perché?
Che cosa succede se in futuro aggiungi un elemento "Eliminato", "Rimosso", "In-Flux", "Nuovo" o qualsiasi altro tipo di stato? Ora devi riscrivere il codice perché tutto ciò che volevi fare è mostrare una lista combinata di domande in sospeso e risposte.
Quindi dai alla tua interfaccia utente meno controllo su elenchi massicci, e invece permetti di recuperare solo le informazioni limitate di cui ha bisogno e alterare / combinare da lì.