Jedną z metod, których zwykle używam w naszej bazie kodu, jest niepoprawna (i poprzedza mnie).
To naprawdę irytuje mnie nie tylko dlatego, że jest źle napisane, ale, co ważniejsze, sprawia, że ZAWSZE mylę nazwę przy pierwszym wpisywaniu (a potem muszę pamiętać: „Och, racja, należy ją źle odczytać ...”)
Wprowadzam kilka zmian w stosunku do oryginalnej metody. Czy powinienem skorzystać z okazji, aby po prostu zmienić nazwę tej dziwacznej metody?
refactoring
Raz Dwa Trzy
źródło
źródło
Odpowiedzi:
Absolutnie.
To powiedziawszy, jeśli twój kod został wydany jako API, powinieneś również ogólnie zostawić niepoprawną metodę i przekazać ją do poprawnie nazwanej metody (oznaczenie jako Nieaktualne, jeśli Twój język obsługuje takie rzeczy).
źródło
Są przypadki, w których należy unikać takich refaktoryzacji:
Jeśli metoda jest używana w interfejsie publicznym. Kanonicznym przykładem jest błędna pisownia strony odsyłającej w odsyłaczu HTTP , przy zachowaniu niepoprawnej pisowni, ponieważ zmiana pisowni miałaby teraz zbyt wiele następstw.
Jeśli podstawa kodu nie jest objęta żadnymi testami. Wszelkie refaktoryzacje należy przeprowadzać na testowanym kodzie, aby móc przeprowadzić test regresji. Refaktoryzacja bazy kodu, która nie jest testowana, jest szczególnie ryzykowna. Jeśli masz dużo czasu, zacznij od dodania testów; jeśli pracujesz pod presją czasu, podejmowanie ryzyka wprowadzenia subtelnych błędów nie jest najlepszym rozwiązaniem, jeśli chcesz wysłać na czas.
Jeśli metoda może być użyta w nietypowy sposób , co praktycznie uniemożliwia jej zastosowanie (za pomocą Ctrl + F lub zautomatyzowanego narzędzia do refaktoryzacji). Na przykład w języku C # można wywołać metodę poprzez odbicie, co powoduje, że okno dialogowe Zmień nazwę programu Visual Studio jest nieskuteczne. W JavaScript
eval()
trudno jest również znaleźć funkcję o nazwie inside . W PHP zmienne zmienne mogą powodować problemy.Jeśli wielkość projektu jest ogromna, a metoda może zostać wykorzystana przez inne zespoły. Jest to podobne do pierwszego punktu, tzn. Interfejs, który udostępniasz innym zespołom, można uznać za interfejs publiczny.
Jeśli masz do czynienia z projektem krytycznym dla życia. Możliwe, że błąd ortograficzny nie jest zbyt ważny, aby uzasadnić kilka miesięcy papierkowej roboty w celu zmiany nazwy metody i upewnienia się, że nie spowoduje to, że żaden pacjent otrzyma dziesięciokrotność autoryzowanego promieniowania lub jakiegokolwiek wahadłowca, aby przeliczyć prędkość.
W każdej innej sytuacji możesz zmienić nazwę metody.
źródło
Zrobiłem to kilka miesięcy temu (z różnych powodów). Kroki, które podjąłem (językiem był Perl):
Po pewnym czasie usuń metodę o starej nazwie.
Oczywiście twój przebieg będzie się różnić.
źródło
Dobrym sposobem na nie zerwanie żadnego istniejącego kodu byłoby połączenie nowej nazwy metody ze starą w takiej jak
a następnie oznacz starą metodę jako przestarzałą (jeśli Twój język to obsługuje). W ten sposób każdy istniejący kod będzie nadal działał i będziesz mógł stopniowo usuwać wszystkie stare błędy pisowni ze swojej bazy kodu. W końcu możesz nawet skopiować / wkleić treść metody do nowej metody i usunąć starą.
/ Edycja ivo Jak powiedział w komentarzu: Jeszcze lepszym rozwiązaniem byłoby przenieść kod z
TheOldMethodName
Into theMyNewMethodName
i wywołać nową metodę od starej. Ten miałby również tę zaletę, że pomógłby deweloperowi dowiedzieć się, gdzie należy kod.źródło
Zmiana nazwy metody:
To są dwie opcje, na które możesz pójść. Wolę automatyczne uzupełnianie (np. Eclipse IDE) i nie muszę wpisywać nazwy metody. Zmieniam nazwę; po prostu upewnij się, że dowiesz się, jakie wywołuje tę metodę i zmienisz bezpośrednie odniesienia w każdym miejscu. Refaktoryzacja będzie twoim przyjacielem, ale bądź ostrożny, robiąc to.
źródło
Ogólnie polecam tak, zmień nazwę.
Inne odpowiedzi tutaj wymieniają dobre powody, dla których możesz nie chcieć zmienić jego nazwy, więc jeśli znajdziesz się w takiej sytuacji, możesz utworzyć nową metodę o właściwej nazwie i implementacji oraz zmienić starą metodę, aby wywołać nową metodę . Następnie zaznacz stary jako przestarzały, jeśli Twój język go obsługuje.
źródło