Wpis z mikrobloga

Praca programisty jest fascynująca, bo każdego dnia uczysz się czegoś nowego. Ja np. nauczyłem się nowego wzorca projektowego:

Grzesiowy ośmiotysięcznik - nie ma takiego wzorca projektowego, którego nie da się zastąpić skończoną ilością ifów

Nazwa wzięła się od 8 tysięcy ifów znalezionych w jednej tylko klasie

#programowanie #programista15k #naukaprogramowania
  • 33
  • Odpowiedz
@kuite22: albo jeżeli kod został wygenerowany automatycznie.

W sumie to nie rozumiem tego hejtu na ify - 10 ifów i 10 bloków kodu to samo zło.

Opakuj te 10 bloków kodu w lambdach, wsadź do hashmapy, wymyśl dla nich jakieś podejrzane klucze i napisz map.get(handlerName).apply() i już nagle uuuu jaki piękny kod.

A gówno, 10 ifów i 10 bloków kodu było milion razy bardziej czytelne i przynajmniej prowadziło do zrozumiałych stack
  • Odpowiedz
@vasco_da_gama: zauważyłem że na kod narzekają programiści co skupiają sie na kodowaniu

ale poza programowaniem istnieje szerszy kontekst czyli biznes chce mieć ten feature na teraz a na refaktor przyjdzie czas jak będzie potrzeba rozszerzania tego feature np.
  • Odpowiedz
W sumie to nie rozumiem tego hejtu na ify - 10 ifów i 10 bloków kodu to samo zło.


@vasco_da_gama: w sumie racja, po co się rozpisywać, jakieś różne klasy, pliki, jakieś interfejsy, warstwy, połapać się człowiek nie może. A tam to masz jeden plik, 20 tysięcy linii, wszystko elegancko czytelne

biznes chce mieć ten feature na teraz a na refaktor przyjdzie czas


@kuite22: na refactor przyjdzie czas - pomyślał,
  • Odpowiedz
A tam to masz jeden plik, 20 tysięcy linii, wszystko elegancko czytelne


@mag_zbc: no ale bez takich strawmenów, piszę o "10 blokach kodu" czyli max 200 linii. Zastąpisz to 8 interfejsami, 10 klasami, 3 warstwami to stracisz na czytelności. Ogólnie - tam gdzie architektura jest potrzebna tam należy ją wprowadzić. Ale masa developerów zaczyna kodować "mikroserwisy" (bo to modne) które powinny zamknąć się w max. 200 liniach (w końcu są mikro
  • Odpowiedz
zauważyłem że na kod narzekają programiści co skupiają sie na kodowaniu


@kuite22: słusznie zauważyłeś, ja np. dużo częściej debuguję cudzy kod niż piszę i nauczyło mnie to trochę doceniać proste ify, pętle i zhardkodowane public final static String z konfiguracją.

Ale większość systemów jakie widzę to niestety - nie if tylko handler, handler znajdziesz w tablicy handlers, inicjalizowanej w HandlersFactory na podstawie wpisów z konfiguracji, konfiguracja pobrana z ConfigRepository
  • Odpowiedz
@erajwa: o, to też mój ulubiony anty pattern.

Switch taki lamerski, walnijmy najlepiej kombo strategia + template method a wszystko ładnie okraszone przez AbstractStrategyFactory :)

A potem najlepszy hit jest jeżeli faktycznie akurat zdarzy się że jakimś cudem trzeba coś dodać za pół roku - oczywiście szansa że pisana pół roku temu template method będzie pasować do nowego use case'a jest żadna więc kończy się dodaniem metody shouldDoSomething do wszystkich klas
  • Odpowiedz
@krasnoludkolo: ha, ale czemu porównujesz "wiele klas" z "jedną metodą"? Pełna zgoda, wiele małych klas jest lepsze niż jedna ogromna metoda. Ale wiele małych metod jest lepsze niż wiele małych klas, przy założeniu że metody nie mają side-effects i wszystkie argumenty są im przekazane jako parametr (pomijając może jakieś quasi-globalne pola typu final Connection które i tak zawsze są takie same i immutable)

A klasy dodają do tego wszystkiego niepotrzebny stan
  • Odpowiedz
@vasco_da_gama: jak można wywnioskować po nazwach klas piszesz o java i Twoje doświadczenia chyba trafiają w sedno sedna. Od "kilku" lat piszę w cpp i wraz z java8 wystrzelił boom na lambdy, to było jak zachłyśnięcie się tematem(które trwa do dziś) i totalna euforia. Wielu programistów próbowało mi tłumaczyć wspaniałość tej techniki(u mnie w korpo, które zajmuje się tylko deweloperką, w 99% java/scala//kotlin) na hasło, że w cpp11 to weszło do
  • Odpowiedz
@vasco_da_gama generalnie lepiej iść w niemutowalnosc niż niepotrzebne Stany i unikać sideeffectow ile się da. Druga kwestia że od jakiegoś czasu staram się trzymać zasady żeby klasa była wielkości monitora. Jeśli umiesz sprawnie poruszac się po ide to polecam

@d_u_p_a możesz podać przykład nadużywania lambd? Chyba że je wrzucają gdzie są da ale to co innego :p
  • Odpowiedz
Jeśli umiesz sprawnie poruszac się po ide to polecam


@krasnoludkolo: u mnie problem jest bardziej skomplikowany - pracuje w jednym z największych korpo na świecie (jeśli nie największym) które ma typowe SOA - i ogólnie spoko, przy tej skali biznesu to SOA ma kupę sensu. Ale oznacza to że 1 powiedzmy "operacja" woła ze 20 serwisów.

A ja mam w IDE tylko 2-3, te nad którymi pracuję. Często jednak muszę czytać
  • Odpowiedz
jak można wywnioskować po nazwach klas piszesz o java


@d_u_p_a: a tak, to ważne bo Java ma dużo dziwactw, np. 1 klasa = 1 plik + żeby zrobić klasę trzeba się strasznie dużo boilerplate'u napisać więc jest to dużo "grubsza" struktura niż metoda. 3 metody to ~15 linii kodu, analogiczne 3 klasy to ~40 i 3 pliki...

Jak piszę np. w Scali gdzie takiego ograniczenia nie ma to dużo małych klas
  • Odpowiedz