Sto lavorando a un progetto con diverse liste di controllo (domande e risposte) associate a un'entità (Protocollo). Esiste un requisito aziendale affinché queste domande vengano modificate in futuro e quando viene creata una nuova entità, questa verrà associata alla checklist corrente.
Esempio:
Diciamo che c'è una lista di controllo e ha 21 domande (le domande reali sono annidate con domande che hanno altre domande ma credo che questo sia fuori dallo scopo di questa domanda). Questa sarebbe la versione 1.0
. Qualcosa cambia e ora ci sono 22 domande e la versione verrebbe caricata fino a 1.1
.
Quando viene creata una nuova Protocol
, è necessario che sia associata a Checklist
- l'attuale Checklist
.
Classi semplificate:
class Checklist {
String version
List<ChecklistQuestion> checklistQuestions
}
class ChecklistAnswerSet {
Checklist checklist
List<ChecklistAnswer> checklistAnswer
}
class Protocol {
ChecklistAnswerSet checklistAnswerSet
...
}
Nuovi Protocol
vengono creati all'interno di ProtocolService
; anche il child checklistAnswerSet
viene creato qui, ma deve fare riferimento all'istanza Checklist
corrente.
Stiamo lavorando con un backend di Grails ed è estremamente facile ottenere riferimenti alle istanze tramite i loro campi:
Checklist checklist = Checklist.findByVersion('1.1')
Potrei rilasciarlo nel mio ProtocolService
per ottenere l'istanza corrente ma so che non è una buona idea. Qualsiasi modifica a questa versione richiederebbe modifiche al codice del Servizio e sebbene io possa evitare una ridistribuzione (magia dei graal), questo sembra completamente sbagliato.
Dove posso conservare questo 1.1
? In un file di configurazione? Nel database? O ho sbagliato completamente e il mio design ha bisogno di una rilettura completa?
Inizialmente, stavo conservando questo 1.1
di dati all'interno di una tabella di valori / chiavi generica che abbiamo nel database chiamato System_Property
, ma si è appena sbagliato. La mia reazione istintiva è di usare un file di configurazione (ci sono altri Checklist
e quindi altre versioni correnti che andrebbero anche qui), ma un collega dice che solo le impostazioni ambientali vanno nei file di configurazione.