Zwykle przechodzę kilka kroków z tym problemem, zatrzymując się, gdy nie mogę dowiedzieć się, jak iść dalej.
Najpierw zrób to, co zrobiłeś. Idź ostro z DRY. Jeśli nie skończysz z wielkim owłosionym bałaganem, skończysz. Jeśli, podobnie jak w twoim przypadku, nie masz duplikatu kodu, ale każda wartość logiczna ma sprawdzoną wartość w 20 różnych miejscach, przejdź do następnego kroku.
Po drugie, podziel kod na bloki. Do boolean przypisuje się tylko jeden raz (no może czasami dwa razy), aby skierować wykonanie do odpowiedniego bloku. Z dwoma booleanami masz cztery bloki. Każdy blok jest prawie identyczny. DRY zniknął. Nie rób z każdego bloku osobnej metody. Byłoby to bardziej eleganckie, ale umieszczenie całego kodu w jednej metodzie sprawia, że każdy, kto zajmuje się konserwacją, widzi, że musi wprowadzić każdą zmianę w czterech miejscach. Przy dobrze zorganizowanym kodzie i wysokim monitorze różnice i błędy będą prawie oczywiste. Masz teraz możliwy do utrzymania kod i będzie działać szybciej niż oryginalny splątanej bałagan.
Po trzecie, spróbuj pobrać duplikaty linii kodu z każdego z bloków i przekształć je w ładne, proste metody. Czasami nic nie możesz zrobić. Czasami niewiele możesz zrobić. Ale z każdym krokiem cofasz się w kierunku DRY i sprawia, że kod jest nieco łatwiejszy do śledzenia i bezpieczniejszy w utrzymaniu. Idealnie byłoby, gdyby Twoja oryginalna metoda nie zawierała duplikatu kodu. W tym momencie możesz podzielić go na kilka metod bez parametrów boolowskich lub nie. Wygoda kodu telefonicznego jest teraz głównym problemem.
Dodałem swoją odpowiedź do dużej liczby już tutaj ze względu na drugi krok. Nienawidzę powielania kodu, ale jeśli jest to jedyny rozsądny sposób rozwiązania problemu, zrób to w taki sposób, aby każdy na pierwszy rzut oka wiedział, co robisz. Użyj wielu bloków i tylko jednej metody. Uczyń bloki możliwie identycznymi pod względem nazw, odstępów, wyrównania, ... wszystkiego. Różnice powinny wyskoczyć na czytnik. To może sprawić, że oczywiste będzie, jak przepisać go w SUCHY sposób, a jeśli nie, utrzymanie go będzie dość proste.
createTrajectory...
wywołują różne funkcje publiczne ?