Znam tę sytuację bardzo dobrze. Kiedy utknę w ten sposób, staram się spojrzeć na projekt z różnych punktów widzenia.
1.) Punkt widzenia użytkownika / klienta - wykorzystaj informacje zwrotne
Niestety nasz kod został złapany w taki sposób, że nie jesteśmy w stanie dostrzec własnych wad, ponieważ używamy naszych aplikacji w sposób, w jaki je zakodowaliśmy. Zobacz, jak ludzie go używają i spróbuj dowiedzieć się, jakie byłyby najbardziej intuicyjne wskazówki dla użytkownika. Baw się z prototypami interfejsu użytkownika. To wydaje się być zabawne, ale jeśli odkryjesz, że będziesz zmuszony przekodować ogromne części kodu po prostu zmieniając logikę użytkowania, to nadszedł czas, aby rozpocząć cykl przeprojektowywania.
2.) Wykonaj funkcjonalną analizę swojego kodu i wizualizuj go
Niektóre IDE i frameworki popychają cię np. Do mieszania interfejsu użytkownika i kodu zaplecza. Jeśli na to pozwolisz, pewnego dnia staniesz w obliczu sytuacji, w której twoja baza kodu będzie trudna do utrzymania z powodu mglistych i trudnych do złamania zależności. Szczególnie mieszanie kodu interfejsu użytkownika z innym kodem może prowadzić do kodu spaghetti i zbędnej funkcjonalności. Podziel swój kod na bloki funkcjonalne, takie jak np. Klasy baz danych, klasy komunikacji, klasy interfejsu użytkownika, klasy podstawowe itp. I nadaj blokom funkcyjnym wymawiające nazwy. Następnie wizualizuj funkcjonalność za pomocą narzędzia graficznego (używam narzędzia mapowania myśli), aby dowiedzieć się, czy twoja struktura jest na tyle logiczna i modułowa, że możesz ponownie wykorzystać ogromne bloki kodu dla różnych projektów i możesz je zastąpić nowszymi wersjami bez duży ból.
Z mojego doświadczenia najlepiej to zrobić, tworząc dokument, który wizualizuje wszystkie zależności między twoimi klasami i ich wywołaniami z twojego kodu. Rezultatem jest wizualizacja projektu interfejsu. Jeśli ta mapa kodów wygląda jak kompletny klaster ***, to czas na działanie. Jeśli tak się nie stało, powinieneś pomyśleć o odpowiedniej konwencji nazewnictwa, która reprezentuje strukturę kodu w taki sposób, abyś nie musiał myśleć o tym, jak ją wywołać i co robi.
3.) Stosuj wspólne podejścia do zapewniania jakości
Moim ulubionym jest FMEA. Pod względem kodowania oznacza to nie tylko analizę tego, co poszło źle w przeszłości, ale także zastanowienie się, co może pójść nie tak. Dość częstym przykładem jest nagle przerwane połączenie sieciowe. Po wykonaniu tej czynności możesz sklasyfikować warunki błędu według konsekwencji, takich jak utrata danych, awaria, błędne obliczenia i ocena wpływu na użytkownika. Jeśli jeszcze tego nie zrobiono, zdefiniowanie usprawnionych klas błędów i wyjątków oraz procedur może pomóc w utrzymaniu kodu w czystości i prostocie. Najlepszym sposobem jest zaimplementowanie ich w każdym nowym kodzie kodu, zanim zaczniesz pisać cokolwiek innego. (Cóż, jestem winny nie zawsze sam stosować się do tej rady).
Ponadto pomógł mi wygenerować i często aktualizować „listę propozycji ulepszeń” dla mojego własnego kodu. (Szczerze mówiąc, w moich projektach wciąż jest dużo kodu, z którego zdecydowanie nie jestem dumny.) Staram się również poświęcić trochę czasu na zebranie i przyjrzenie się kodowi najlepszych praktyk z dokumentacji API, konferencji programistycznych lub czasopism programistycznych.
Do tego momentu nie trzeba dotykać kodu. To po prostu uświadomienie sobie, co się dzieje nie tak, i znalezienie sposobu na zdefiniowanie sposobu ulepszenia kodu.
Wreszcie kilka wskazówek dotyczących codziennej pracy ze starego pierdnięcia. Staraj się unikać gryzienia więcej niż możesz zjeść. Prowadzi to do zbyt dużej presji na czyste kodowanie. Rzadko masz czas, aby zrobić to dobrze, ale będziesz musiał poświęcić czas, aby naprawić wady.
Nic nie jest tak trwałe, jak rozwiązanie tymczasowe, ale gdy się zepsuje, często jest za późno, aby to naprawić na czas. Przykładami są paskudne ataki hakerskie lub dziwne wyjątki, w których zwykle znajdowałem coś do roboty, pomimo np. Wady w strukturze lub systemie operacyjnym. A potem błąd został naprawiony lub nowa wersja po prostu upuszcza API…
Jeśli utkniesz i zostaniesz zmuszony do znalezienia obejścia, dodaj komentarze i rób notatki, które należy od czasu do czasu sprawdzać. Zwykle stajemy się coraz lepsi dzięki uczeniu się czegoś nowego. Jeśli znajdziesz lepszy sposób, zastosuj go tak szybko, jak to możliwe. W przeciwnym razie może się okazać, że kodujesz obejście tego obejścia i wyjątek jednego dnia. (Ten, który jest między wami bez grzechu, niech rzuca we mnie pierwszym bajtem).