Zanim ukazała się książka Martina Fowlera „Refactoring: Improving the Design of Existing Code”, nazywaliśmy duże zmiany kodem „rearchitekturą”, a drobne zmiany „porządkiem”. IMO, techniki refaktoryzacji to zdrowy rozsądek / oczywiste rzeczy, które robiliśmy od zawsze.
Czy uważasz, że refaktoryzacja była kiedykolwiek czymś nowym? Być może to tylko sposób na oszukiwanie zarządzania w przydzielaniu czasu na czyszczenie kodu?
design
refactoring
terminology
Chuck Stephanski
źródło
źródło
Odpowiedzi:
Refaktoryzacja jest starsza niż wzgórza, więc nie, to nie jest nic nowego.
A refaktoryzacja nie sprząta. Cóż, może tak być, ale nie ogranicza się do sprzątania.
Dostosowuje architekturę aplikacji (w dużej lub małej skali), zachowując zachowanie.
Oznacza to, że choć wczoraj część aplikacji mogła być idealnie czysta i dobrze, dzisiejsza nowa funkcja wymaga dostosowania tej części, aby dostosować ją do nowej funkcji.
Nie chcesz przerywać istniejącej funkcjonalności, więc dostosowujesz strukturę aplikacji, zachowując zachowanie - czyli refaktoryzację.
To powiedziawszy, bez względu na to, jakie zmiany zostaną wprowadzone w kodzie, należy zawsze uruchamiać jego testy ... na wszelki wypadek.
źródło
Po prostu porządkuje kod. Zasadniczo programiści (zwłaszcza Martin Fowler) zauważyli, że mieli tendencję do wykonywania tych samych zadań za każdym razem, gdy poprawiali swój kod. Zdefiniowali i oznaczyli metody porządkowania oraz powiązane problemy z kodem i presto! Narodziło się refaktoryzacja.
To samo dotyczy wzorców projektowych - ludzie zauważyli, że mieli tendencję do stosowania tego samego podejścia do określonych problemów w kółko. Oznaczyli i zdefiniowali podejścia, a teraz wydaje się, że nie jesteś prawdziwym programistą, chyba że użyjesz tylko tego samego tuzina wzorców w kodzie.
Refaktoryzacja nie wymaga magii; to tylko nowy zestaw żargonu opisujący starą praktykę.
źródło
W naszej firmie wykonujemy trzy osobne czynności, przydzielając czas na trzy:
Przykład: podzielenie brzydkiej i nieczytelnej metody 100 linii, która robi cztery rzeczy na cztery metody wielokrotnego użytku, każda po 25 linii.
Przykład: usunięcie skomentowanego kodu po upewnieniu się, że ten kod nie jest już potrzebny.
Przykład: dodawanie
Culture.Invariant
wstring.Format
(lub innego kultura, która jest bardziej właściwe).W moim przypadku refaktoryzacja jest czymś zupełnie innym niż porządkowanie . Kiedy robi porządki, nie trzeba ponownie uruchomić testy jednostkowe: jeśli kod pracował wcześniej, to będzie działać po czyszczeniu. Innymi słowy, to nie dlatego, że usunąłem pusty wiersz lub dodałem komentarz, że kod przestanie działać. Z drugiej strony, kiedy refaktoryzuję skomplikowane części starego kodu, mogę popełnić błędy, więc po refaktoryzacji muszę przeprowadzić testy jednostkowe.
źródło
Refaktoryzacja dodaje wiedzę do twojego kodu. Jeśli wiesz, że coś ma niepoprawną nazwę, nadaj jej lepszą nazwę. Jeśli wiesz, że coś można zrobić lepiej, zmieniasz to w coś lepszego.
Jest wiele kroków - małych i dużych - które, mam nadzieję, skutkują lepszym programem.
źródło
Zgadzam się z tym, że „refaktoryzacja to wymyślne słowo do czyszczenia kodu”, ale nie z „tylko”. Ludzie używają fantazyjnych słów z jakiegoś powodu: czasami dlatego, że chcą wyglądać sprytnie, a czasem dlatego, że przekazują większe lub bardziej precyzyjne znaczenie, a refaktoryzacja IMHO (nawet jeśli czasami niewłaściwie używana) odnosi się ogólnie do tego drugiego.
„Oczyszczanie” może znaczyć wszystko, od „nieco sformatowania” do „przepisywania dużych fragmentów”.
„Refaktoryzacja” oznacza w szczególności coś w rodzaju „małych stopniowych zmian w kodzie, zaprojektowanych w celu utrzymania tej samej funkcjonalności, a jednocześnie przekształcenia jej w lepszy projekt”. Istnieje szereg najlepszych praktyk w zakresie tego, co robisz: niektóre są ad hoc, ale istnieją ogólne zasady, takie jak stosowanie testów jednostkowych, wyodrębnianie części funkcji do nowych funkcji lub klas itp., Których ludzie mogą i powinni się uczyć .
Mówisz „po prostu podstępnie zarządzaj, aby przydzielić czas na czyszczenie kodu”. Ale jeśli powiedzenie „refaktoryzacja” poprawnie przekazuje koncepcję, że stała inwestycja w klarowność teraz przyniesie dywidendy w wydajności w przyszłości, to nie jest to „sztuczka”, to jasna i skuteczna komunikacja.
źródło
Refaktoryzacja polega na kodowaniu, ponieważ normalizacja dotyczy danych relacyjnych. Jest to proces przekształcania koncepcji w czystsze, jaśniejsze i bardziej wydajne reprezentacje ich roli w aplikacji.
źródło
To zależy, jak rozumiesz refaktoryzację terminu. Dla większości ludzi jest to proces ulepszania struktury bez zmiany zachowania. Jeśli się zgadzasz, to tak, zrobiono to na długo przed wydaniem tej książki. Wiem, ponieważ zmieniłem nazwy klas, wyodrębniłem klasy i wyodrębniłem metody przed napisaniem książki. Nie nazwałam tego refaktoryzacją, ale w zasadzie robiłam dokładnie to samo.
Dla mnie osobiście refaktoryzacja to, co ludzie nazywają teraz „automatyczną refaktoryzacją kodu”, tj .: wsparcie dla różnych technik refaktoryzacji wewnątrz IDE. To jest prawdziwa poprawa tego, co robiłem wcześniej (co było naprawdę bardzo bolesne). Mogę dokonać zmiany w jednej klasie i nie martwić się, jak wpłynie to na resztę oprogramowania. Myślę, że Martin sformalizował technikę refaktoryzacji do tego stopnia, że mogłaby być reprezentowana jako algorytm, a tym samym zaimplementowana w różnych IDE.
Więc jeśli rozumiesz refaktoryzację jako proces, to nie jest to nic nowego. Jeśli postrzegasz to jako automatyzację, to tak, to ogromna poprawa. Spróbuj zmienić nazwę kilku podstawowych klas (dosłownie, nie poprzez opcje refaktoryzacji twojego IDE) w dość dużym projekcie, aby zobaczyć dlaczego :)
źródło
Refaktoryzacja to rzeczywiście „czyszczenie” kodu, ale także restrukturyzacja kodu. W moim zespole refaktoryzacja jest zwykle tym drugim. Kiedy mamy przypadek „refaktoryzacji”, poświęcamy czas na restrukturyzację naszego kodu, np. W celu dostosowania go do nowej architektury lub modelu informacyjnego lub w celu zwiększenia jego wydajności.
„Czyszczenie” kodu to coś, co robimy bez przerwy, bez specjalnie przeznaczonego na to czasu. Dla mnie „czyszczenie” zwykle oznacza zmianę nazwy, usuwanie komentarzy itp.
źródło
Powiedziałbym nie
W procesie refaktoryzacji mogą występować porządki, ale nie jest to istotą.
Oczyszczanie zakłada, że poprzedni kod nie jest czysty. W rzeczywistości programiści refaktoryzują swój kod, nawet oryginalny kod jest już czysty.
DRY jest kluczowym czynnikiem wpływającym na refaktoryzację.
Podczas dodawania nowych kodów do istniejącej bazy kodów refaktoryzacja odbywa się w sposób naturalny, zgodnie z zasadą OSUSZANIA.
Tylko moje 0,02
źródło
Czyszczenie kodu jest jak sprzątanie domu, refaktoryzacja jest jak burzenie ściany i umieszczanie go gdzie indziej
źródło
Kiedy ktoś sprząta w twoim domu, nie możesz niczego znaleźć, ponieważ celem jest uporządkowanie sprawy. Refaktoryzacja pozwoliłaby zbudować i oznaczyć pokoje, szafy, szafki, półki, kosze itp. Nadal zawiera większość tych samych rzeczy (nadal możesz zrobić kanapkę z serem z grilla w kuchni i zjeść ją w salonie), ale powinna to zrobić łatwiej znaleźć i być może mieć wydajne miejsca na nowe rzeczy.
źródło
Termin „refaktoryzacja” został elegancko zapożyczony z algebry. Oznacza to uproszczenie warunków, aby uzyskać ten sam wynik. Był nie tylko elegancki, ale i rewolucyjny - wymagał twardego, skończonego podejścia do twojego kodu, na poziomie, który zaskoczył wielu. Tak więc sam termin był znaczący i pomocny.
źródło
Nie. Refaktoryzacja poprawia strukturę bez zmiany zachowania. Refaktoryzacja w ścisłym tego słowa znaczeniu wymaga dobrej dyscypliny testowej. Niekoniecznie jest to wymagane, gdy „czyścisz rzeczy”.
źródło
Obie pokrywają się trochę na krawędziach, ale dla mnie to różnica między czyszczeniem domu a przebudową domu. Oczyszczanie nie oznacza dla mnie zmian strukturalnych, a refaktoryzacja.
źródło
„Refaktoryzacja” to tak naprawdę to samo, co „rearchitektura”, ale z silniejszą konotacją „bez zmian funkcjonalności”. Jest również jaśniejszy pod względem celu polegającego na ponownej architekturze, która często polega na „rozłożeniu” wspólnego kodu na części wielokrotnego użytku.
źródło