Di solito faccio diversi passaggi con questo problema, fermandomi quando non riesco a capire come andare oltre.
Innanzitutto, fai quello che hai fatto. Vai duro con DRY. Se non si finisce con un grande casino peloso, il gioco è fatto. Se, come nel tuo caso, non hai un codice duplicato ma ogni valore booleano viene controllato in 20 punti diversi, vai al passaggio successivo.
In secondo luogo, dividere il codice in blocchi. Ai booleani viene fatto riferimento una sola volta (bene, forse due volte a volte) per indirizzare l'esecuzione al blocco giusto. Con due booleani, si finisce con quattro blocchi. Ogni blocco è quasi identico. DRY è sparito. Non rendere ciascun blocco un metodo separato. Sarebbe più elegante, ma mettere tutto il codice in un metodo rende più facile, o addirittura possibile, per chiunque esegua la manutenzione vedere che è necessario apportare ogni modifica in quattro punti. Con un codice ben organizzato e un monitor alto, le differenze e gli errori saranno quasi evidenti. Ora hai un codice gestibile e funzionerà più velocemente del disordine aggrovigliato originale.
In terzo luogo, prova a catturare righe duplicate di codice da ciascuno dei tuoi blocchi e trasformali in metodi semplici e piacevoli. A volte non puoi fare niente. A volte non puoi fare molto. Ma ogni piccola parte che fai ti riporta indietro a SECCO e rende il codice un po 'più facile da seguire e più sicuro da mantenere. Idealmente, il metodo originale potrebbe finire senza un codice duplicato. A quel punto, potresti voler dividerlo in diversi metodi senza i parametri booleani oppure no. La convenienza del codice chiamante è ora la preoccupazione principale.
Ho aggiunto la mia risposta al numero elevato già qui a causa del secondo passaggio. Odio il codice duplicato, ma se è l'unico modo intelligibile per risolvere un problema, fallo in modo tale che chiunque possa sapere a colpo d'occhio cosa stai facendo. Utilizzare più blocchi e un solo metodo. Rendi i blocchi il più identici possibile in nomi, spaziatura, allineamenti, ... tutto. Le differenze dovrebbero quindi saltare fuori dal lettore. Potrebbe rendere ovvio come riscriverlo in modo ASCIUTTO e, in caso contrario, mantenerlo sarà ragionevolmente semplice.
createTrajectory...
funzioni pubbliche chiamano?