Yakooo

Singleton to wzorzec czy antywzorzec? ( ͡° ͜ʖ ͡°)

  • Wzorzec 65.8% (52)
  • Antywzorzec 34.2% (27)

79 głosów

2
  • Najlepsze
  • Wszystkie komentarze
Noxon
@Yakooo: Ogólnie to antywzorzec, bo testy.
Ale kontenery DI już od dawna ładnie je ogarniają w inny sposób.
4
omnipotentmasterofnone
omnipotentmasterofnone
@Yakooo: Nigdy nie spotkałem się z sensownym argumentem przeciwko singletonowi.
Zazwyczaj chodzi o to że jest jednym z najbardziej rozpowszechnionym i bezmyślnie nadużywanym wzorcem który usprawiedliwia i zastępuje początkującym zmienne globalne.
W małych projektach zawsze mam jakiegoś singletona, jest wygodny :) Czekam na hate.
4
Noxon
@omnipotentmasterofnone: Koronnym argumentem jest niemożliwość/trudność testowania tego guana. Poza tym, w aplikacjach mocniej stawiających na lokalny stan (apki desktopowe, mobilne itp.) jest bardzo często używany. Ale tak jak napisałem wyżej... w formie IoC przez DI.
2
Saly
@Yakooo: zazwyczaj to antypattern, bo strasznie psuje kod. Czasami ma sens w przypadku niefunkcjonalnych ficzerów jak jakieś metryki czy np. globalne cachowanie ale nawet w takich przypadkach powinno się ich unikać.
1
omnipotentmasterofnone
omnipotentmasterofnone
@Saly: No jak masz 100% pokrycie kodu to to ma sens, wiem po co się tworzy testy. Osobiście nie spotkałem się z testami w gamedevie, ewentualnie po stronie serverowej jeśli taka istnieje.
Niestety testy sprawdzaja się najlepiej w logice biznesowej, dla nas jest manualne testowanie i crawlery. Może by mi się udało napisać testy dla kilku % kodu który i tak nie sprawia kłopotów.
1
MacDada
@Yakooo: why not both?
0
omnipotentmasterofnone
omnipotentmasterofnone
@Noxon: Testy są akceptowanym agrumentem, jeśli jesteś zmuszony do ich pisania :)
Pracuje w branży gdzie testy praktycznie nie występują ze względu na burzliwy proces tworzenia i bardzo niski code coverage. Jestem ateista ale Bogu dziękuję że nie muszę pisać testów, najgorsza robota ever.
0
Saly
Pracuje w branży gdzie testy praktycznie nie występują ze względu na burzliwy proces tworzenia i bardzo niski code coverage. Jestem ateista ale Bogu dziękuję że nie muszę pisać testów, najgorsza robota ever.


@omnipotentmasterofnone: jak masz testy to zmieniasz linijkę, puszczasz testy i robisz PR. Jak nie masz testów to zmieniasz linijkę, testujesz wszystkie ficzery przez parę godzin ręcznie i robisz PR. Brak testów przyśpiesza development w danej chwili, ale im
0
patrolez
@Yakooo: w jednym kontekście to będzie antywzorzec, a w innym to będzie super-wzorzec.

Singleton ma sens w momencie, gdy coś, co ma obsługiwać owy singleton faktycznie wymaga scope globalnego i nie opłaca się go wszędzie przekazywać.

W programowaniu funkcyjnym to singleton odpowiadałby za jedyny "dopuszczalny"/tolerowany punkt, na którym można wykonywać "skutki
0
Saly
@omnipotentmasterofnone: faktycznie, gry jest ciężko przetestować
0