To zależy. Naprawdę istnieją 2 rodzaje metod statycznych:
- Metody, które są statyczne, ponieważ MOGĄ być
- Metody, które są statyczne, ponieważ MUSZĄ takie być
W małej lub średniej bazie kodu można naprawdę traktować obie metody zamiennie.
Jeśli masz metodę, która należy do pierwszej kategorii (może być statyczna) i musisz ją zmienić, aby uzyskać dostęp do stanu klasy, stosunkowo łatwo jest dowiedzieć się, czy można zmienić metodę statyczną w metodę instancji.
Jednak w dużej bazie kodu sama liczba witryn wywołujących może sprawić, że wyszukiwanie w celu sprawdzenia, czy możliwe jest przekonwertowanie metody statycznej na niestatyczną, jest zbyt kosztowne. Wiele razy ludzie zobaczą liczbę połączeń i powiedzą „ok ... lepiej nie zmieniać tej metody, ale zamiast tego utworzę nową, która robi to, czego potrzebuję”.
Może to spowodować:
- Dużo powielania kodu
- Eksplozja liczby argumentów metod
Obie te rzeczy są złe.
Więc moja rada byłaby taka, że jeśli masz kod bazowy powyżej 200K LOC, uczyniłbym metody statycznymi tylko wtedy, gdy są one metodami statycznymi.
Refaktoryzacja z niestatycznej do statycznej jest stosunkowo łatwa (wystarczy dodać słowo kluczowe), więc jeśli chcesz później przekształcić zmienną can-be-static w rzeczywistą statyczną (gdy potrzebujesz jej funkcjonalności poza instancją), możesz. Jednak refaktoryzacja odwrotna polegająca na przekształceniu metody can-be-static w metodę instancji jest DUŻO droższa.
W przypadku dużych baz kodu lepiej jest popełniać błędy po stronie łatwości rozszerzenia niż po stronie czystości idealogicznej.
Tak więc w przypadku dużych projektów nie rób statycznych rzeczy, chyba że tego potrzebujesz. W przypadku małych projektów po prostu rób to, co lubisz najbardziej.