È una buona idea lasciare che i valori chiave dei database surrogati si riversino in altri aspetti del codice (HTML, Controller, Modello, Livello repository)?

0

È accettabile utilizzare id nei moduli HTML e la successiva elaborazione del codice (controller, vista, modello, livelli del repository)?

Ad esempio, devo mostrare qualcosa di simile su una pagina web:

Select Motor Choice:
* 460/50/3
* 380/50/3
* 460/60/3

In HTML questo può essere fatto con un controllo radio , in cui ogni riga ha un attributo value , che non viene mostrato, e text , che viene mostrato sullo schermo.

Ho sopra codificato nel database in questo modo:

id, motor_description
1, "460/50/3"
2, "380/50/3"
3, "460/60/3"

Posso usare id per value in HTML radio control, e posso usare quel id internamente pure nel mio Controller dove elaboro l'input per fare la ricerca sul motore.

Ma dal momento che id è una chiave surrogata e non significa nulla, farò meglio a evitare di usarlo, e invece di usare più informazioni significative per l'utente, come il campo motor_description a cercare i dati nella tabella e fare altre elaborazioni relative alle mie esigenze aziendali?

La mia preoccupazione qui è ... anche se sto usando la chiave surrogata nella tabella del database , continuo a usarla anche in il resto della mia applicazione , o è meglio evitare di farlo?

In altre parole, permetto alla chiave surrogata del database di "riversarsi" in altri aspetti del mio codice, o evito di farlo?

    
posta Dennis 25.09.2018 - 17:07
fonte

2 risposte

4

Sì. Hai bisogno di un ID univoco per queste cose e l'id DB si adatta al ruolo.

Idealmente, l'ID univoco è indipendente dal database. Avere un GUID sul proprio oggetto business e usarlo come chiave DB piuttosto che viceversa. Ma il 99,9% delle volte sarà una differenza puramente concettuale.

    
risposta data 25.09.2018 - 17:25
fonte
1

L'uso di chiavi surrogate al di fuori di un database va bene se

  • quelle chiavi sono immutabili al 100% e sono garantite che non cambino mai in seguito (dato che in genere non è possibile aggiornarle in sistemi esterni)

  • anche se tali chiavi ottengono maggiore visibilità in questo modo, puoi impedire a qualsiasi stakeholder di inventare nuovi "requisiti aziendali" per queste chiavi (come "consente di utilizzare un ID magico 9999 per un modello motore")

  • il valore di quegli ID non fornisce informazioni interne al mondo esterno che non vuoi mostrare a nessuno (come un numero che consente ai concorrenti di vedere quante offerte o ordini di un certo tipo la tua azienda ottiene al mese )

risposta data 25.09.2018 - 18:44
fonte