Conosco molto bene questa situazione. Quando rimango bloccato in quel modo, provo a prendere diversi punti di vista sul progetto.
1.) Punto di vista dell'utente / cliente: utilizzare il feedback
Purtroppo nel nostro codice siamo catturati in un modo in cui non siamo in grado di vedere i nostri difetti perché usiamo le nostre applicazioni nel modo in cui le abbiamo codificate. Guarda come le persone lo usano e cerca di capire quale sarebbe la guida utente più intuitiva. Gioca con i prototipi dell'interfaccia utente. Questo sembra essere divertente, ma se scopri che saresti costretto a ricodificare enormi parti del tuo codice semplicemente cambiando la logica di utilizzo di quanto sia tempo di iniziare un ciclo di riprogettazione.
2.) Fai un'analisi funzionale del tuo codice e visualizzalo
Alcuni IDE e framework ti spingono ad esempio a mescolare l'interfaccia utente e il codice back-end. Se lasci che ciò accada, un giorno affronterai la situazione che difficilmente la tua base di codice può essere mantenuta a causa di dipendenze nebulose e difficili da spezzare. Soprattutto la miscelazione del codice UI con altri codici può portare a spaghetti code e funzionalità ridondanti. Dividi il tuo codice in blocchi funzionali come ad es. Classi di database, classi di comunicazione, classi UI, classi core ecc. E dai ai blocchi funzione pronunciando nomi. Quindi visualizza la funzionalità con uno strumento grafico (utilizzo uno strumento di mappatura mentale) per scoprire se la tua struttura è abbastanza logica e modulare da poter riutilizzare enormi blocchi di codice per diversi progetti e puoi sostituirli con versioni più recenti senza grande dolore.
Il modo migliore per farlo nella mia esperienza è creare un documento che visualizzi tutte le dipendenze tra le tue classi e le loro chiamate dal tuo codice. Il risultato è una visualizzazione del design dell'interfaccia. Se questa mappa di codice sembra un cluster completo ***, allora è il momento di agire. Se non è ancora successo, dovresti pensare a una convenzione di denominazione adatta che rappresenti la tua struttura di codice in un modo in cui non devi pensare a come chiamarlo e a cosa fa.
3.) Utilizzare approcci comuni per la garanzia della qualità
La mia preferita è la FMEA. In termini di codifica ciò significa non solo analizzare cosa è andato storto in passato, ma anche pensare a cosa potrebbe andare storto. Un esempio abbastanza comune è una connessione di rete improvvisamente interrotta. Dopo aver effettuato l'operazione, è possibile classificare le condizioni di errore in base a conseguenze quali perdita di dati, crash, calcoli errati e valutare l'impatto sull'utente. Se non ancora fatto, la definizione di classi e routine di errore semplificate e di eccezioni può aiutarti a mantenere il codice pulito e chiaro. Il modo migliore è implementare quelli in ogni nuova pace di codice prima ancora di iniziare a scrivere qualsiasi altra cosa. (Beh, sono colpevole non sempre a seguire questo consiglio da solo.)
Inoltre mi ha aiutato a generare e aggiornare frequentemente un "elenco di proposte di miglioramento" per il mio codice. (Ad essere sinceri, nei miei progetti c'è ancora molto codice di cui non sono assolutamente orgoglioso.) Cerco anche di prendermi il tempo per raccogliere e dare un'occhiata al codice delle migliori pratiche da documentazioni API, conferenze degli sviluppatori o riviste degli sviluppatori.
Fino a questo punto non è necessario toccare il codice. Si tratta semplicemente di rendersi conto di cosa non va e di trovare un modo per definire come migliorare il codice.
Finalmente alcuni consigli per il lavoro quotidiano di una vecchia scoreggia. Cerca di evitare di mordere più di quello che puoi mangiare. Questo porta a troppa pressione per una codifica pulita. Raramente hai il tempo di farlo bene, ma dovrai prenderti il tempo per riparare i difetti in seguito.
Niente è di lunga durata come la soluzione provvisoria, ma quando si rompe spesso è troppo tardi per risolverlo in tempo. Esempi sono brutti hack o strane eccezioni che ho usato per far funzionare qualcosa, ad esempio un difetto nel framework o nel sistema operativo sottostante. E poi il difetto viene risolto o la nuova versione semplicemente lascia cadere l'API ...
Se sei bloccato e sei costretto a trovare una soluzione alternativa a fare commenti e prendere appunti che dovrebbero essere rivisti di volta in volta. Normalmente miglioriamo sempre di più grazie all'apprendimento di qualcosa di nuovo. Se trovi un modo migliore di implementarlo il più velocemente possibile. Altrimenti potresti trovarti a codificare la soluzione alternativa per la soluzione alternativa e l'eccezione dell'eccezione un giorno. (Chi è senza peccato in mezzo a te, lascia che mi lanci il primo byte).