È possibile impostare un valore predefinito per un processo aziendale nella definizione della colonna del database?

3

Il team aziendale della mia azienda ha creato un nuovo campo da aggiungere a una delle nostre entità. Per le nuove istanze di questa entità, verrà calcolata dinamicamente, ma per le istanze esistenti in precedenza, è necessario impostare un valore predefinito di, al momento, 15. Posso facilmente impostarlo come valore predefinito nel db, ma per me, fa parte della logica del business. Non solo può cambiare in futuro, ma è anche separato dal resto della logica di business, il tutto a tutt'oggi a livello di applicazione. Sarà persino in qualche modo nascosto agli sviluppatori.

Posso, non così elegantemente, scrivere del codice a livello di applicazione che imposterà quel valore quando verranno ricaricate nuove istanze. Ma questo è più brutto.

La mia domanda è quindi, è giusto mettere questa "logica aziendale" nel database?

EDIT: Non sto chiedendo pro / contro di diverse architetture con la logica di business nel DB / app, ma come indicato nella modifica del titolo, su questo caso concreto di un valore predefinito.

    
posta user3748908 01.11.2016 - 16:06
fonte

3 risposte

5

Devi eseguire la migrazione di alcuni dati. Questa logica appartiene a quello script. Lo script dovrebbe modificare le voci correnti a 15, ma assolutamente non dovresti lasciare artefatti di quella decisione nel tuo schema. Dopo la migrazione, il numero "15" non fa parte del tuo dominio, quindi non dovrebbe apparire in un vincolo o predefinito.

Se si prevede di poter modificare questo valore predefinito dopo la migrazione, sarà necessario avere un modo per indicare un'entità di pre-migrazione. Utilizzare un valore nullo per questo, aggiungere una colonna 'versione dell'entità' (o qualcosa) o utilizzare una sorta di struttura di tabella basata sull'ereditarietà. Quindi interpretalo come 15 nel codice.

Se esiste un valore predefinito per i nuovi client dopo la migrazione (che sembra non esserci) che potrebbe appartenere allo schema della tabella come valore predefinito, ma preferirei vederlo nel codice.

Quando dico "Nel codice", voglio dire che è lì che si trovano le decisioni. Va bene avere il numero 15 effettivo in alcune tabelle o configurazioni a seconda di come cambia, perché cambia e in che modo è distribuito il tuo sistema.

    
risposta data 01.11.2016 - 17:41
fonte
3

Questa è una di quelle domande in cui potresti ottenere due risposte ugualmente valide da diversi lati del campo. Hai detto che non vuoi una spiegazione dei pro e dei contro di approcci diversi, quindi lasciami andare direttamente al nocciolo della tua domanda.

Il valore predefinito di un numero magico per una colonna della tabella è considerato parte della business logic?

La risposta è .

Si potrebbe scrivere un requisito aziendale come regola o una dichiarazione in modo tale che:

If X is not specified for business entity Y, then the value of X property of that business entity should be 15.

Tutto il resto è un dettaglio di implementazione. Questo è un requisito aziendale ben definito con una dichiarazione condizionale ben definita. Questo condizionale si adatta alla descrizione della logica aziendale.

Non sottolineare l'ovvia best practice qui di cui la logica aziendale appartiene e quali database sono destinati a fare e fare bene ( non tossire logica aziendale nel database! tosse ), questa domanda è stata posta e ha risposto molte volte su questo sito.

    
risposta data 01.11.2016 - 17:44
fonte
1

"Posso facilmente impostarlo come valore predefinito nel db, ma per me è parte della logica aziendale." Per essere precisi - non fa parte della business logic, il valore esatto fa parte della configurazione della business logic . È assolutamente normale che il team di sviluppo non sappia se è "15" o "ACME".

Non consiglio di "scrivere del codice a livello di applicazione che imposterà quel valore quando verranno ricaricate nuove istanze". BACIO se non hai una vera ragione.

Che cosa potresti prendere in considerazione

  1. Nella procedura di aggiornamento dell'applicazione, chiedere all'utente di fornire questo valore esatto (o in qualche modo riceverlo da fuori del proprio codice) e quindi compilare la colonna in db con esso. Spesso puoi calcolare il valore dai dati esistenti, ma sembra che non sia l'opzione in questa situazione.
  2. Nella documentazione dell'applicazione è disponibile un passaggio in cui questa specifica versione richiede questa specifica impostazione durante l'installazione. Significa "prima dell'installazione di questa versione chiedere al team aziendale di fornire il valore dell'impostazione".
risposta data 02.11.2016 - 08:59
fonte

Leggi altre domande sui tag