Zwykle instynkt polega na usunięciu wszelkich duplikacji kodu widocznych w kodzie. Znalazłem się jednak w sytuacji, w której duplikacja jest iluzoryczna .
Bardziej szczegółowo opisując sytuację: tworzę aplikację internetową, a większość widoków jest w zasadzie taka sama - wyświetla listę elementów, które użytkownik może przewijać i wybierać, drugą listę zawierającą wybrane elementy oraz „Zapisz ”, aby zapisać nową listę.
Wydawało mi się, że problem jest łatwy. Jednak każdy widok ma swoje dziwactwa - czasem trzeba coś przeliczyć, czasem trzeba zapisać dodatkowe dane itp. Rozwiązałem je, wstawiając haki wywołania zwrotnego do głównego kodu logicznego.
Jest tak wiele drobnych różnic między widokami, że staje się ono coraz mniej łatwe w utrzymaniu, ponieważ muszę zapewnić wywołania zwrotne dla praktycznie całej funkcjonalności, a główna logika zaczyna wyglądać jak ogromna sekwencja wywołań wywołań zwrotnych. W końcu nie oszczędzam czasu ani kodu, ponieważ każdy widok ma swój kod, który jest wykonywany - wszystko w wywołaniach zwrotnych.
Problemy są następujące:
- różnice są tak małe, że kod wygląda prawie dokładnie tak samo we wszystkich widokach,
- jest tak wiele różnic, że kiedy patrzysz na szczegóły, kodowanie nie jest trochę podobne
Jak mam poradzić sobie z tą sytuacją?
Czy posiadanie podstawowej logiki złożonej wyłącznie z wywołań zwrotnych jest dobrym rozwiązaniem?
A może powinienem raczej powielić kod i porzucić złożoność kodu opartego na wywołaniu zwrotnym?