Refaktoryzacja - szkielet
Refaktoryzacja - szkielet
09 Feb 2018
Refaktoryzacja - szkielet
Refaktoryzacja
- Korzyści
- Narzędzia
- Podejście ‘od problemu do rozwiązania’ przy refaktoryzacji
- Podejście systemowe
- Pętla ‘koncepcja-cele-implementacja-weryfikacja’ w praktyce, w sposób możliwy do powtórzenia.
- Celowość, iteracyjność, kryterium końca
- Korzyści
- Inżynierskie podejście do przebudowania kodu pod kątem celu
- Sprawdzenie, czy zmiany jakie chcecie wprowadzić są “lepsze”
- Dostaniecie recepturę, która u mnie się sprawdza przy małych i dużych.
- Refaktoryzacja nie jest straszna
- Streszczenie myśli przewodniej
- Refaktoryzacja to przebudowa nie zmieniająca wymagań funkcjonalnych.
- “Refaktoryzacja” sama w sobie nie ma sensu. Musi być “refaktoryzacja do czegoś”, pod kątem celu.
- Przebudowa istniejącego kodu wymaga przeanalizowania całości systemu, nie tylko tego elementu systemu.
- Sukces refaktoryzacji zależy od zidentyfikowania problemu i zaplanowania działań.
- Proponuję podejście: “Kontekst -> problem -> ideał -> (strategia <-> weryfikacja strategii) -> (działanie -> weryfikacja wyniku)”
- Iteracyjność, ewolucja a nie rewolucja. Ustawienie warunków sukcesu.
- Bez zrozumienia problemu i domeny refaktoryzacja raczej nie przyniesie maksymalnego zwrotu.
- Jeśli nie wiesz po czym poznasz sukces, nie osiągniesz sukcesu i nie obronisz rozwiązania.
- Kontekst refaktoryzacji
- Co to: Przebudowa bez zmian wymagań funkcjonalnych
- Wyjaśnienie systemu: przykład silnika parowego, który ma działać też na Syberii jak i na pustyni
- Część, Całość, Otoczenie
- Wszystko się zmienia przez zmianę Otoczenia biznesowego. Refaktoryzacja jest dostosowaniem do CZEGOŚ
- Restrukturyzacja w firmie. Firma 3-osobowa, firma 10000-osobowa.
- Ten artykuł unika politycznego aspektu refaktoryzacji
- Jak to robić - pobieżnie?
- Kontekst -> problem -> ideał -> (strategia <-> weryfikacja strategii) -> (działanie -> weryfikacja wyniku)
- Iteracyjne podejście: Ewolucja, nie rewolucja
- Przepisanie lub przeniesienie
- Kryterium końca
- Przykład z regexami
- Kontekst: regexy
- Problem: nowa osoba ma dużo kopiowania i wklejania kodu by zrobić nowy regex
- Poznam sukces po: łatwo dodać nowy element, nawet junior da radę, bez durnego kopiowania
- Ideał: losowy junior może łatwo dodać nowy regex
- Strategia 1: wydzielenie regexów do stringów
- Weryfikacja str 1: PORAŻKA. Regexy są trudne dla juniora
- Strategia 2: parametryzacja regexów
- Weryfikacja str 2: Sukces, junior potrafi pracować z funkcjami
- Działania: zbiór kroków
- Weryfikacja wyniku:
- porównanie czasu na dodanie nowego elementu przez weterana (mnie)
- sprawdzenie jak łatwo dodać nowy regex
- Sami możecie zrobić to ćwiczenie
- Link do ćwiczenia
- Opisanie ćwiczenia
- Link do zbiorczego commita
- Link do brancha na rdbutlerze
- Jak to robić - omówienie?
- Kontekst -> problem -> ideał -> strategia <-> weryfikacja strategii -> działanie -> weryfikacja wyniku
- Iteracyjne podejście: Ewolucja, nie rewolucja
- Przepisanie lub przeniesienie
- Kryterium końca
- Co jest potrzebne?
- Domena
- Mierzalny sposób weryfikacji
- Kontekst: w czym działam (500 milisekund, hardware zajmuje 600 milisekund)
- Kontekst: Otoczenie jako System (problem bazy danych z nullami)
- Podsumowanie
- Niektóre cele są sprzeczne; dlatego nie ma refaktoryzacji idealnej
- Stożek nieoznaczoności: najlepiej pisać kod pod kątem “łatwo go zmienić”, nie “idealny kryształ”
- Kod to UI programisty. Skupienie na testowalności i mutowalności
- Nie znam żadnych “uniwersalnych technik” - wszystkie są kontekstowe
- Obszary ciepłe aplikacji, obszary zimne aplikacji - krystalizacja z czasem
- Refaktoryzacja to przede wszystkim problem polityczny
- Wykazanie korzyści
- Przebudowanie kodu pod kątem celu
- Czy zmiany są zmianami “na lepsze”?
- Receptura jak to robić by działało.
- Refaktoryzacja nie jest straszna.