Come conservare la versione corrente di un'istanza? Memorizza il riferimento a un'istanza specifica?

0

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.

    
posta tylerwal 16.02.2016 - 23:46
fonte

1 risposta

1

Per una soluzione completa semplicemente la memorizzazione della versione non sarebbe sufficiente, semplicemente perché

  1. Potresti eliminare una domanda nella versione successiva e desideri comunque mantenere le risposte per le versioni precedenti
  2. Quando modifichi una domanda, se la risposta è ancora collegata alla domanda cambiata, non avrà senso una volta cambiata la domanda

Quindi idealmente, vorrai memorizzare qualcosa come questo,

class Checklist {
    List<ChecklistVersion> checklistVersions
}

class ChecklistVersion {
    String version
    List<ChecklistQuestion> checklistQuestions
}

class ChecklistAnswerSet {
    ChecklistVersion checklistVersion
    List<ChecklistAnswer> checklistAnswer
}

class Protocol {
    ChecklistAnswerSet checklistAnswerSet
    ...
}

aggiungendo un oggetto versione separata, non avresti problemi se una domanda viene cancellata, o una nuova aggiunta o esistente cambiata

    
risposta data 17.02.2016 - 01:17
fonte