Come gestire enormi cambiamenti alle specifiche dei dati?

1

Abbiamo un programma C che utilizza un file di intestazione .h per descrivere la struttura dati personalizzata che usiamo. La struttura dei dati deve seguire il progetto nelle specifiche funzionali. C'è un diagramma per descrivere il membro delle strutture dati e sarebbe descritta una sintassi astratta ANS.1, e quindi il file asn verrebbe compilato in un file di intestazione .h.

Al fine di migliorare il nostro sistema, è stata approvata una richiesta di modifica delle specifiche funzionali e una nuova specifica. (Saltiamo da 2,10 a 2,12 come abbiamo saltato l'aggiornamento di 2,11) Confrontando 2,10-2,12, un sacco di cose nuove sono state aggiunte e alcune cose vecchie sono state rimosse. Abbiamo bisogno di utilizzare un nuovo .asn per compilare un nuovo file di intestazione .h al fine di seguire le specifiche.

Il problema è che qualcosa è stato rimosso. Ad esempio alcuni membri di una struttura dati sono stati rimossi e abbiamo utilizzato il membro per la logica nel programma. Il programma non può nemmeno essere compilato con il nuovo file di intestazione. Il programma è stato installato e funzionante e vorremmo evitare qualsiasi grave down time a causa di questo aggiornamento.

P.S. La specifica non è solo per la nostra azienda, è uno standard per la struttura dei file di invio dei file tra i componenti all'interno dell'intero settore. Supponiamo che, se si dichiara di utilizzare la specifica 2.12, e l'altra parte tratterà il file con lo standard 2.12 e scarterà tutti i file che non seguono lo standard.

P.S. Ovviamente non c'è opzione. La decisione è presa. Tuttavia, sto affrontando un problema che il programma c è stato scritto da altre persone e ha una logica complessa. Il programma sarebbe enormemente danneggiato dalla modifica del file di intestazione. E forse non ne ho idea per ripristinare la pace e la funzionalità. Qualsiasi suggerimento su come verificare ogni differenza è apprezzato.

    
posta lamwaiman1988 27.08.2012 - 08:19
fonte

1 risposta

1
  • Il controllo delle versioni è la tua prima linea di difesa.

Se gli oggetti dati passati non hanno già incorporato un numero di versione, è necessario aggiungerne uno. Avere un ID versione ti consentirà di determinare se si tratta della specifica precedente con le informazioni che ti interessano o quella più recente.

  • Racchiudere l'oggetto dati | struct diventa la tua prossima linea di difesa.

Invece di modificare semplicemente il codice esistente che legge l'oggetto dati e lo inserisce nell'applicazione, crea un sottile strato di codice che elabora l'oggetto dati e lo converte in una struttura che puoi passare all'interno dell'applicazione. Ad un livello più ampio, stai disaccoppiando la tua applicazione dalla versione specifica dell'oggetto dati che ricevi.

All'interno di questo sottile strato, puoi aggiungere una logica che determina quale versione dell'oggetto dati hai ricevuto. Se si tratta della versione successiva, è possibile aggiungere la logica per sostituire i valori mancanti o inserire invece valori fittizi.

Il wrapping dell'oggetto dati ti consente di conservare il contratto che hai tra i livelli del tuo codice. Allo stesso modo, avrai flessibilità su quali versioni dell'oggetto dati puoi ora inviare.

Un esempio di stack di applicazioni potrebbe essere simile a questo:

Rest of the application code
    internal application data struct
data object processing layer
    received data objects (v2.10, v2.12)
    
risposta data 04.12.2012 - 18:39
fonte

Leggi altre domande sui tag