Sono interessato a quali strategie le persone hanno escogitato per separare tutta la logica crufty necessaria per mantenere la retrocompatibilità dal codice principale di un'applicazione. In altre parole, strategie che ti consentono di avvicinarti ad avere il tuo codice come se non ci fossero problemi di compatibilità con le versioni precedenti, ad eccezione di file sorgente separati separati distintamente per quell'attività.Come si separa in modo pulito il codice per la compatibilità con le versioni precedenti dal codice principale?
Ad esempio, se l'applicazione legge un particolare formato di file, invece di una gigantesca funzione di analisi dei suoni, è possibile che il codice esegua prima una iterazione di un elenco di voci/oggetti "quirk", in cui ogni stranezza controlla il file per vedere se è un file a cui si applica, e in tal caso invoca la propria logica di analisi anziché la normale logica del caso.
Quirks è una strategia OK, ma devi lavorare per mettere i ganci per i controlli di quirk in tutti i punti appropriati della tua app, e come saranno i controlli per vari tipi di eccentricità, ecc. Sembra quasi come dovrebbero esserci librerie dedicate al boilerplate per questo compito. Un altro problema è come far sì che le stranezze non vengano abusate come aggancio generale in blocchi arbitrari dell'app.
+1: Di solito è anche il mio approccio. Un semplice wrapper (per il codice) e un convertitore di formato (per i dati) è in genere sufficiente per creare un livello di compatibilità decente. –
Probabilmente la strategia più pulita, anche se sarebbe complicato se si hanno dati enormi. Quindi penso che vorrai implementare le visualizzazioni dell'adattatore invece di eseguire la conversione effettiva, e la stratificazione potrebbe essere dolorosa in una lingua senza riflessione come C++. –