Mam taka sytuacje, prosze o Wasze zdanie: sa 2 klasy, ktore maja pare metod o takiej samej sygnaturze, kod w nich jest w znacznym stopniu taki sam, plus jedna metoda robi cos dodatkowo w jednym miejscu, a druga w innym, w srodku metody (nie da sie przeniesc na poczatek lub na koniec, przestanie dzialac). Dodam ze nie jest to zadne API uzywane przez inne firmy / zespoly, to klasy tylko i wylacznie w naszej aplikacji. Ilosc tego kodu to jeden ekan, razem z komentarzami (niewiele), definicjami metod i importami.
Podejscie 1: moge wygmerac z tego wspolna klase bazowa, ktora bedzie trzymac wspolny kod, dodac pare metod ktore podklasy musza zaimplementowac i ich wywolania wstawic w strategiczne miejsca wspomnianych wyzej metod. Kilka metod musze wyodrebnic jako pomocnicze, ktore wlasciwe implementacje moga wolac, ale jako ze jezyk w ktorym to jest pisane (Objective C) nie ma protected, beda one musialy byc w naglowku czyli publiczne, czyli zabrudza interfejs. (Sa i na to sposoby, ale to wprowadziloby jeszcze wiecej komplikacji kodu.)
Podejscie 2: zostaje jak jest, czyli troche kodu skopiowane w obu klasach, pare metod identycznych, pare troszke sie rozniacych. Kod prosty bez zadnej magii.
Na pierwszy rzut oka podejscie 1 wydaje sie znacznie lepsze / poprawne, a podejscie 2 beznadziejne (copy/paste?), jednakze podejscie 1 znacznie skomplikowaloby dosc prosty kod. Jest go tez dosc malo.
Jakie jest Wasze zdanie? Refactoring i klasa bazowa no matter what, czy macie jakies dopuszczalne limity?