Come faccio a analizzare un'intestazione con due versioni diverse [ID3] evitando la duplicazione del codice?

1

Spero davvero che tu possa darmi dei punti di vista interessanti per la mia situazione, perché non sono soddisfatto del mio attuale approccio.

Sto scrivendo un parser MP3, iniziando con un parser ID3v2.

In questo momento sto lavorando sull'analisi estesa dell'intestazione, il mio problema è che l'intestazione opzionale è definita in modo diverso nella versione 2.3 e 2.4 del tag.

L'intestazione opzionale della versione 2.3 è definita come segue:

struct ID3_3_EXTENDED_HEADER{
    DWORD dwExtHeaderSize;          //Extended header size (either 6 or 8 bytes , excluded)
    WORD  wExtFlags;                //Extended header flags
    DWORD dwSizeOfPadding;          //Size of padding (size of the tag excluding the frames and headers)
};

Mentre la versione 2.4 è definita:

struct ID3_4_EXTENDED_HEADER{
    DWORD dwExtHeaderSize;          //Extended header size (synchsafe int)
    BYTE  bNumberOfFlagBytes;       //Number of flag bytes
    BYTE  bFlags;                   //Flags
};

Come posso analizzare l'intestazione riducendo al minimo la duplicazione del codice?

L'uso di due diverse funzioni per analizzare ogni versione suona meno bene, utilizzando una singola funzione con un flusso diverso per ogni occasione è simile, qualsiasi buona pratica per questo tipo di problemi? Qualche consiglio per evitare la duplicazione del codice?

Qualsiasi aiuto sarebbe apprezzato.

    
posta user66141 25.09.2012 - 18:14
fonte

1 risposta

1

Ti stai preoccupando della duplicazione del codice per 2 intestazioni di 3 campi? Nel tempo impiegato per scrivere questa domanda, potresti aver codificato entrambi i parser. Onestamente, basta farlo.

Se non sono presente qui, ti preghiamo di aggiornare la tua domanda per indicare perché la duplicazione su una scala così ridotta è un problema per te.

Se davvero non vuoi due funzioni separate, codificane una singola con un controllo if in

Potrei vedere scrivere una routine comune per rompere le bandiere all'interno della Parola | Byte.

Non sembra che la logica che circonda il campo delle dimensioni dell'intestazione sia abbastanza significativa da giustificare la preoccupazione per la duplicazione, ma se non fosse banale, allora potrebbe avere senso un'altra routine comune per la convalida.

Non intendo essere duro, ma la "buona pratica" in questo caso è di farlo e di passare ai più grandi problemi di progettazione del tuo spazio problematico. Chiamerei questa preoccupazione un caso di ottimizzazione prematura. Parte del motivo per cui stai lottando per trovare la "risposta giusta" è perché la differenza tra "giusto" e "abbastanza buono" è piuttosto piccola.

    
risposta data 25.09.2012 - 18:59
fonte

Leggi altre domande sui tag