Ten post jest pierwszą częścią tematu poświęconego pracy z „czystym kodem”. Przykładem jest moja aplikacja Paint (do rysowania) stworzona klika lat temu. Kod tej aplikacji jest bardzo legacy, ale działa.

Przypadkiem wpadłem na tę projekt, uznałem, że zasługuje na to aby został poprawiony. Ja w ten sposób poćwiczę „dobre praktyki” i może dzięki tym wpisom na blogu uzyskam jakieś wskazówki co do tego jak kod powinien wyglądać. Ja uczę się pisać dobry kod, brak w mojej firmie Code Review wcale mi w tym nie pomaga. Czasami nie ma się kogo spytać jak coś ma wyglądać, a ten blog to jedyny sposób na pokazanie mojego kodu więc będę nie z miernie wdzięczny za wskazówki dotyczące tegoż projektu.

Wersja aplikacji oryginalna (dołożony zrzut ekranu, która to funkcjonalność została zerżnięta z internetów ), na koniec tę możliwość usunę bo nie jest mi potrzebna.

Strona z gotową klasą umożliwiającą zrobienie „zrzutu ekranu”.

Github original paint

Refaktryzacja, jak zrobić żeby nie zepsuć? bardziej

Moja propozycja.

Wydaje mi się, że działania  i ich kolejność przy refaktoryzacji zależy od doświadczenia programisty, który podejmuje się tego zadania.

Moje kroki:

  1. Zrozumieć kod.
  2. Wydaje mi się że najważniejsza zasadą każdej refaktoryzacji jest metoda małych kroków.
  3. Poprawić nazwy, klas (chociaż z tym bym uważał), metod(na tym bym się skupił) i właściwości (ważne).
  4. Powtórzenia kodu usuwać i wrzucać do jednej metody.
  5. Metody „wyniesione”  w poprzednim punkcie, można wrzucić za interfejs, tworząc dzięki temu klasy odpowiadające za część jakieś logiki.
  6. Tworzone obiekty zastępować interfejsami (odwrócenie zależności).
  7. Redukować powtarzającą się logikę.
  8. Unit testy też by się przydały, tego też się uczę.

Przykład kodu do refaktoryzacji

W powyższy kod był odpowiedzialny za wybór narzędzia do rysowania na „płótnie” poprzez ustawienie którejś z flag.

Co można z robić z takim kodem?

Można by go zamienić na klasę z metodami:

  • utworzenie listy narzędzi dostępnych w systemie,
  • aktywacja narzędzia po jego nazwie,
  • wybór aktywnego narzędzia

Klasa ta będzie ukryta za interfejsem, dzięki temu unikniemy ścisłego wiązania klasy z konkretną instancją innej klasy.

Poniżej wywołanie jednego z narzędzi.

Refaktoryzacja:

Zmiana ustawiania „flag” typu bool na słownik (dictionary). Kluczem jest typ datetime, wartość to nazwa wybranego narzędzia która wpisana jest w właściwość Text każdej kontrolki.

Wybór narzędzia polega na tym, że w słowniku wyszukuje ostatnie wybrane narzędzie

W kolejnej części będzie przedstawiony wynik zmina w kodzie odpowiedzialnym za rysowanie/malowanie.

. Część druga …..