Przeczytałem większość książek o refaktoryzacji Fowlera i dokonałem refaktoryzacji wielu aplikacji w mojej dużej i małej przeszłości.
Jedną z trudniejszych rzeczy, których nauczam, jest „kiedy” refaktoryzować. Zwykle robię to w oparciu o przeczucie, które w przeszłości służyło mi wyjątkowo dobrze. Jednak kiedy wchodzimy w dyskusje z ludźmi na temat tego, czy fragment kodu należy teraz zostawić w spokoju, czy zrekonstruować, trudno jest trzymać się „kontroli jelita”.
Wydaje mi się, że powinny być do tego bardziej rygorystyczne podejścia, ale nie jestem pewien, czym one są.
Rozumiem „zapachy kodowe”, refaktor czerwono-zielony i inne myśli, ale często wydaje mi się, że najlepszym czasem na refaktoryzację nie jest pierwszy raz, kiedy piszesz kod, ale drugi lub trzeci raz, kiedy używasz kodu i zdajesz sobie sprawę że tak naprawdę jest to problem i jest w użyciu.
źródło
Odpowiedzi:
Refaktoryzuj, gdy koszt refaktoryzacji jest mniejszy niż koszt braku refaktoryzacji.
Zmierz „koszt”, jakkolwiek możesz. Na przykład, czy kod jest tak słabo zaimplementowany, że usunięcie drobnych błędów zajmuje wiele godzin lub dni? Czy refaktoryzacja pozwoli Ci zdobyć więcej klientów, zwiększyć wydajność lub poprawić wydajność, a tym samym uszczęśliwić obecnych klientów?
źródło
Measure "cost" however you can.
- OK, jak? Czy to nie jest sedno pytania? Jaką perspektywę czasową należy zastosować, mierząc ten koszt?Punktacja
Dodaj odpowiedzi „nie” powyżej:
źródło
Kiedy twoje wnętrzności mówią ci, że powinieneś zrobić pewne refaktoryzacje, to prawdopodobnie twoje instynkty mówią ci trochę za późno, że odkładasz coś ważnego zbyt długo.
Istnieją dwa poziomy refaktoryzacji. Pierwszy to oczywiste problemy, które pojawiają się przy pierwszym kodowaniu. Są to małe optymalizacje, które bardzo niewiele kosztują z góry. Rzeczy takie jak utrzymywanie małych metod i klas oraz przestrzeganie zasad DRY i SRP. Następnie masz dodatkowy etap radzenia sobie z poważnymi wadami twojego projektu, które mogą nie być od razu widoczne, dopóki twój kod nie znajdzie się pod nim kilka mil. To ten drugi poziom, o którym mówisz, a jednak aby upewnić się, że późniejsze refaktoryzacja nie będzie zbyt kosztowna, musisz już napisać swój kod w taki sposób, aby wysiłek, który później przewidujesz, był łatwiejszy i mniej kosztowny, co oznacza wcześniejsze przeprowadzenie refaktoryzacji.
Jak wspomniał Jeff w swojej odpowiedzi, „czas to pieniądz” , szczególnie w firmach, w których obciążenie pracą jest wysokie, a ryzyko jeszcze większe. Czas spędzony z góry na upewnieniu się, że kod jest w najlepszym możliwym stanie, oszczędza czas później, gdy dowodzenie, co powinno być łatwym refaktoryzacją, okazuje się poważną operacją.
Pisząc oprogramowanie, każda chwila spędzona na ulepszaniu kodu z góry oszczędza czas później, kiedy naprawdę będziesz go potrzebować. Im wcześniej dokonamy refaktoryzacji, tym wyraźniejsze będą późniejsze zmiany. To jak wpłacanie zaliczki w dzisiejszych dolarach w stosunku do przyszłego zadłużenia technicznego, które będzie w jutrzejszych zawyżonych dolarach.
W każdym razie refaktoryzacja nie powinna być zadaniem, które odkładasz do tajemniczej przyszłości, gdy oprogramowanie jest już kompletne i stabilne, ponieważ zwiększa to ryzyko później, gdy stawki są znacznie wyższe, a produkt znacznie trudniejszy do zmiany. Refaktoryzacja powinna być częścią codziennych czynności, a to jest esencja wspomnianej przez ciebie filozofii Refaktora Czerwono-Zielonego.
źródło
Myślę, że na każde pytanie może odpowiedzieć każdy programista, a nawet kierownictwo odpowiedzialne za programowanie.
Moją osobistą preferencją jest to, że za każdym razem, gdy uczę się czegoś nowego lub doskonalę swoje najlepsze praktyki, zmieniam kod, który mogę - lubię utrzymywać swój kod na standardowym poziomie, gdy tylko dowiaduję się, jaki był najlepszy standard do zastosowania w tej sytuacji. Mogę to jednak robić, ponieważ jest to mniejsza firma, która korzysta z tego samego oprogramowania przez długi czas.
W większej firmie zajmującej się tworzeniem oprogramowania, w której czas to pieniądz, być może po prostu zacznij projektować z lepszymi praktykami, których nauczyłeś się od tego momentu, nie martw się o refaktoryzację, aż do wersji 2 tego konkretnego oprogramowania?
Czuję, że nauczanie, kiedy refaktoryzować naprawdę zależy od firmy, w której się obecnie znajdujesz.
źródło
Krótka odpowiedź: za każdym razem, gdy natrafisz na kod, który źle pachnie lub który można poprawić ( reguła skautowa )
W praktyce dzieje się tak:
źródło
Kiedy po raz pierwszy uczyłem się o refaktoryzacji, mój mentor powiedział mi: „Zrób to dwa razy, trzymaj nos. Zrób to trzy razy. Refactor”. (Dzięki, Josh!) Mówiąc konkretnie, powiedział to, że kiedy masz zamiar napisać ten sam blok kodu po raz trzeci (lub nawet podobny wzorzec kodu), jest to czas na refaktoryzację. Śledziłem to przez ostatnie 10 lat i uznałem, że jest to dość rozsądna zasada.
Korzystanie z Eclipse lub podobnego IDE, które ma silne wsparcie refaktoryzacji, zmniejsza wysiłek związany z refaktoryzacją. Obsługa IDE zwiększa prawdopodobieństwo refaktoryzacji, jak tylko trafisz na „trzeci raz” (lub zobaczysz potrzebę), zamiast postrzegać to jako dodatkowy wysiłek.
Również - TDD jest tutaj dużą pomocą, ponieważ możesz nadal uruchamiać testy jako refaktor i wiedzieć, że niczego nie zepsułeś.
źródło
Refaktoryzacja z definicji jest procesem. Oznacza to, że nie powinieneś starać się znaleźć wolnego czasu na zrobienie refaktoryzacji, zamiast tego powinieneś ciągle refaktoryzować cały czas, gdy natrafisz na kod, który można lepiej napisać.
Osobiście lubię pisać ewolucyjne prototypy, mówiąc to prościej: kod, który po prostu działa, a następnie refaktoryzuję je, aż spełnią oczekiwane standardy kodowania. Innym dobrym przykładem jest dodanie dodatkowej funkcjonalności i refaktoryzacja istniejącego kodu, aby umożliwić jego ponowne użycie.
źródło
W ciągu moich 20 lat programowania, oto jedyna praktyczna zasada, którą widziałem w pracy, do której ludzie mogą się trzymać, a menedżerowie dają na to czas. (Refaktoryzacja jest jak dieta: jasne, że „kalorie w / kalorie” to formuła na odchudzanie, ale to nie przekłada się na dietę, którą ludzie będą przestrzegać.) A więc:
Refaktoryzuj w sposób ciągły podczas pracy. Użyj Test Driven Development, aby mieć kilka cykli refaktora czerwono-zielonego w ciągu dnia. Refaktoryzuj tylko te fragmenty kodu, którego dotknąłeś.
Gdy będziesz bardziej pewny siebie, możesz różnić się od tego trybu.
źródło
Myślę, że zależy to od wymagań właściciela projektu i faceta, który odpowiada za jakość kodu. Po prostu nie możesz decydować o tym sam, kiedy pieniądze innej osoby są kwestionowane.
Ze względów technicznych jest ich kilka.
źródło