Se il modello lato client contiene chiavi esterne per estrarre i dati già sul client

0

Attualmente sto costruendo il front-end di un'applicazione usando AngularJS. Non ho molta conoscenza del back-end, ma alcuni dei dati che mi vengono offerti dallo sviluppatore back-end stanno diventando difficili da utilizzare, richiedendo un sacco di rejigging sul front-end, e sto iniziando a sospettare che potremmo gestirlo meglio. Volevo solo ottenere un feedback sulle migliori pratiche su come i dati dovrebbero essere offerti, in particolare se i dati dovrebbero essere estratti con riferimenti di id ad altri dati già pubblicati.

Quando si crea un oggetto, vengono chiamati alcuni metodi getAll per popolare elenchi a discesa o pulsanti di opzione. Ad esempio:

getAllStatus

[
   {id: 1, status: 'new'},
   {id: 2, status: 'used'},
   {id: 2, status: 'handMade'}  
]

getAllType

[
   {id: 1, type: 'flatHead', length: 'long'},
   {id: 2, type: 'machineOval', length: 'long'},
   {id: 3, type: 'machinePhillips', length: 'short'},
   {id: 4, type: 'hollowHeadSet', length: 'short'},
   {id: 5, type: 'selfTapping', length: 'medium'}  
]

Dopo che un articolo è stato creato, ecco un esempio di un pacchetto di dati che potrei ottenere dal server per quell'oggetto specificato. Immagino che idType e idStatus siano chiavi esterne ai set di dati precedenti:

{
   id: 0,
   idStatus: 2,
   label: 'sample',
   idType: 4,
   idRestriction: 3
}

Lo sviluppatore di back-end dice che poiché ho ricevuto tutti i dati con i metodi getAll già che dovrei semplicemente estrarre i dati dagli array già inviati che devo visualizzare all'utente. Mentre questo è possibile, è diventato un po 'un mal di testa da gestire. Ad esempio, se voglio ottenere lo stato o il tipo da uno di questi array, rimappare ogni array, iniettare i servizi Angular ovunque, eseguire i filtri per estrarre gli oggetti da id e impostare i dati su nuove proprietà sul modello. Quando si utilizza semplicemente l'array, l'indice non corrisponde all'id, quindi devo decrementare l'id.

Dal mio punto di vista, sarebbe molto più semplice se mi venisse assegnato un oggetto con valori stringa anziché ID, ad esempio:

{
   id: 0,
   status: 'new',
   label: 'sample',
   type: 'hollow-head set',
   restriction: 'none'
}

Immagino di non sapere veramente quale sia la migliore pratica qui, ma la quantità di manipolazione che ho a che fare con i dati sul front-end si sente davvero sbagliata. Apprezzerei davvero qualsiasi feedback che qualcuno potrebbe avere. Grazie in anticipo.

    
posta hughesjmh 22.12.2016 - 13:07
fonte

1 risposta

0

Quando possibile, dovresti evitare chiamate di database aggiuntive se puoi e lavorare con i dati che hai già, se ti puoi fidare. Nel tuo caso ci sono alcuni motivi per cui sono d'accordo con te sul fatto che il server debba restituire tutte le informazioni di cui hai bisogno.

  1. Hai già una chiamata al database in corso, la differenza tra ciò che desideri e ciò che ottieni è trascurabile.
  2. I dati persistenti sul lato client non dovrebbero essere considerati attendibili in questo modo, se i dati del tipo sono compromessi da un utente malintenzionato e se vengono combinati con una serie di altri dati ti esponi a un rischio maggiore con meno sforzo da parte di un utente malintenzionato. Se usi questi dati solo per il menu a discesa, c'è un rischio molto minore.
  3. lato client JavaScript è probabilmente il posto più lento in cui è possibile eseguire queste operazioni di collegamento, SQL è progettato per eseguire tali operazioni in modo estremamente efficiente, altri linguaggi lato server dispongono di sistemi di tipi potenti che semplificano tali operazioni. Non hai nulla di questo sul lato client.
risposta data 22.12.2016 - 14:10
fonte

Leggi altre domande sui tag