Jestem zainteresowany tym, jakie strategie wymyślili ludzie, aby oddzielić całą logikę crufty, niezbędną do zachowania zgodności wstecznej z głównym kodem aplikacji. Innymi słowy, strategie, które pozwalają ci zbliżyć się do tego, by twój kod wyglądał tak, jakby nie było żadnych zastrzeżeń dotyczących zgodności wstecznej, z wyjątkiem oddzielnych izolowanych plików źródłowych wyraźnie dla tego zadania.Jak czytelnie oddzielasz kod dla kompatybilności wstecznej z głównego kodu?
Na przykład, jeśli aplikacja odczytuje konkretny format pliku, zamiast jednej wielkiej parsującej funkcji honkera, możesz mieć swój pierwszy kod iterujący listę "dziwnych" wpisów/obiektów, gdzie każde dziwactwo sprawdza plik, aby zobaczyć jeśli jest to plik, do którego ma zastosowanie, a jeśli tak, wywołuje swoją własną logikę przetwarzania zamiast normalnej logiki.
Dziwactwa to strategia OK, ale musisz wykonać pracę, aby umieścić zakodowane sprawdzenia we wszystkich odpowiednich miejscach w aplikacji, a to, jak będą wyglądać kontrole, będzie różne dla różnych typów dziwactwa itp. Wydaje się prawie niemożliwe. tak, jak powinny istnieć biblioteki dedykowane do zestawu do tego zadania. Inną kwestią jest to, jak egzekwować, że dziwactwa nie są nadużywane jako haki ogólnego przeznaczenia w arbitralne fragmenty aplikacji.
+1: To zwykle moje podejście. Prosty wrapper (dla kodu) i konwerter formatu (dla danych) zwykle wystarcza do stworzenia przyzwoitej warstwy kompatybilności. –
Prawdopodobnie najczystsza strategia, choć byłoby to trudne, gdybyś dysponował ogromnymi danymi. Wtedy myślę, że będziesz chciał zaimplementować widoki adapterów, zamiast wykonywać rzeczywistą konwersję, a nakładanie warstw może być bolesne w języku bez refleksji jak w C++. –