In quale livello deve esistere la logica di ordinamento

2

Ho una API con 3 livelli

1.) Il livello dell'endpoint che espone le funzioni del gestore dell'endpoint api. Questi in genere chiamano il livello aziendale, aggregano i risultati per formare una risposta http.

2.) Il livello della logica aziendale, che fornisce interfacce per ottenere o modificare dati mentre si utilizzano regole aziendali dietro le quinte, modifica dei dati e applicazione delle regole. Impedisce il gonfiore delle funzioni dell'endpoint API e fornisce una logica riutilizzabile.

3.) il livello dati, esegue la modifica o l'interrogazione effettiva del livello di persistenza (db o altro) senza applicare alcuna logica ai dati.

In alcune delle mie funzioni il livello aziendale deve lavorare con un elenco di oggetti recuperati dal livello dati che è stato ordinato da un campo specifico. Non c'è alcun caso (attualmente prevedibile) in cui il livello aziendale elaborerà mai questo elenco non ordinato in quel campo, quindi in questo caso ha senso ordinare i dati nel livello dati o ha più senso rimanere puri nelle intenzioni dei livelli e anche se ciò significa riordinare l'elenco ogni volta, mantenere l'ordinamento nel livello aziendale?

    
posta tt9 07.09.2016 - 18:50
fonte

2 risposte

5

Se esiste un solo ordine accettabile, dal punto di vista aziendale, decidi se questo ordine è una regola aziendale effettiva o se è inerente ai dati stessi.

Ad esempio:

  • Una tabella di persone può essere ordinata per nome o cognome, o un numero di telefono o un indirizzo e-mail. Forse le regole aziendali in un dominio specifico impongono che abbia senso solo visualizzare questi dati ordinati in base al cognome della persona; ma guardando i dati, non puoi capirlo.

  • D'altra parte, una tabella che contiene due colonne: la data di un evento storico e il nome dell'evento saranno, nella maggior parte dei casi, ordinati per data. Ci si può aspettare che sia ricercabile per nome evento (inclusa la ricerca full-text), ma questo non significa che debba essere ordinato dall'evento; l'unica cosa che significa è che l'evento dovrebbe essere indicizzato per la ricerca full-text.

Si noti che in alcuni casi, se si decide di eseguire l'ordine nel livello aziendale, è possibile in seguito costringere a spostare la logica di ordinamento verso il basso per motivi di prestazioni. Pertanto, scrivi il tuo codice in un modo che renderà questo cambiamento facile in seguito. Tuttavia, non limitarti a inviare l'ordine al livello del database a causa di ipotetici guadagni in termini di prestazioni.

    
risposta data 07.09.2016 - 19:08
fonte
1

Se si ordinano in modo coerente i set di dati nello stesso modo e non sono troppo grandi, è possibile farlo nel database. I database sono abbastanza competenti nell'ordinamento soprattutto quando possono utilizzare un indice.

Ad un certo punto, l'ordinamento è un colpo troppo grande per le prestazioni. È un buon momento per spostarlo nella tua applicazione. Per le app che richiedono più metodi di ordinamento dei dati o se l'algoritmo di ordinamento diventa troppo complicato (non necessariamente un impatto sulle prestazioni), mettilo nella tua logica aziendale. Avere una serie di affermazioni Case nella clausola Order By sarebbe un segno di questo.

Alcuni sviluppatori vorrebbero essere coerenti, quindi se sarà necessario ordinare la logica di business, faranno tutto quanto lì. Assegna un nome agli oggetti di recupero dei dati per indicare se sono ordinati e non dovresti invitare troppa confusione.

    
risposta data 07.09.2016 - 21:08
fonte

Leggi altre domande sui tag