Static – dobry, zły i brzydki

Prywatne pola static – są bardzo NIE OK.
Metody static – są OK.

I o ile jest generalnie zgoda, że nie powinno się używać static w polach to chciałem pokazać, że metody będące statyczne są dobre. Czy powinny być statyczne to zależy od kontekstu. Ja stosuję to tak, że kiedy mogę to staram się przekazać argumenty i uczynić metodę statyczną. Przykłady takich metod z mojego kodu:

Przypadki, gdy zdarzają się publiczne właściwości:

  • ServiceLocator – generalnie antypattern, ale czasem inaczej się nie da i gdy wiem co robię to pozwalam sobie na to.
  • Puste obiekty, gdy sa immutable i mogą być reużywane, przykład EventArgs:
  • … (można dodać w komentarzach)

Przypadki, gdy można uniknąć statycznych publicznych właściwości:

  • Singleton => można rejestrować jako „AsSingleton” w kontenerze IoC.
  • Jest klasa (serwis), która ma stan, i takich instancji jest wiele w aplikacji. Dodatkowo potrzebuję dostęp do jakiejś statycznej kolekcji. Najprościej jest utworzyć jedno pole static, którego będą reużywać wszystkie instancje. Nie robiłbym tak. Lepiej jest tą część, która wydaje się być statyczna wydzielić do innego bytu i przekazać jako zależność, a w kontenerze zarejestrować jako AsSingleton (punkt wyżej).

3 Comments on “Static – dobry, zły i brzydki

  1. Hej.
    Czemu tak robisz. Wiem że można, ale czy masz z tego jakiś zysk? Ja preferuje omijać static (bo tak), ale jeśli jest jakiś powód, który stoi za tym, żeby jednak je mieć, to może się przekonam.

  2. @jstadnicki

    to pewnie dłuższa opowieść by z tego była. Tak na szybko bez kodu:
    – jest bardziej funkcyjnie (czysto, mniej niespodzianek) – o tym też można by dużo rozmawiać, ale wg mnie to działa.
    – metody statyczne się lepiej testuje. nie trzeba setupować całego obiektu (gdy potrzeba nam ustawić tylko jedno pole).

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

w

Connecting to %s