Statyczne metody w niestatycznym obiekcie

0

Witam.
Czy taka praktyka jest właściwa?

public class UserManager {
    
    private final HashMap<String, User> users;
    
    public UserManager() {
        this.users = new HashMap<>();
    }
    
    public void init() {
        //fill users hashmap
    }
    
    private User getUser(String user) {
        return users.get(user);
    }
    
    public static User getUser(String user) {
        return Main.getInstance().getUserManager().getUser(user);
    }
}

W klasie "Main" obiekt UserManager jest initializowany po starcie apki

0

Ops. W metodzie "getUser" powinno być public

0

Po co ta statyczna metoda zatem?

0
Patryk27 napisał(a):

Po co ta statyczna metoda zatem?

Właśnie się pytam czy takie coś ma sens.
Pisanie Main.getInstance().getUserManager().getUser("nazwa") z palca ciągle to trochę brzydko. I chciałem sobię "upięknić" kod takim pomysłem.
Jest to błąd czy nie?

Ładowanie statyczne hashmapy wydaje mi się, że nie jest dobrą praktyką samo w sobie.

0

Poczytaj o stosowaniu dependency injection.

0

Tak, wiem, znam i stosuję (chociaż nie w tym przypadku bo chciałem akurat trochę poeksperymentować :o)

No, ale dobrze. Dzięki za pomoc ;)

0
Uczynny Kot napisał(a):

Witam.
Czy taka praktyka jest właściwa?

Mniej więcej tak jak praktyka srania z balkonu, czyli - to zależy, ale moim zdaniem niewłaściwa. Samo stosowanie singletonów (getInstance()) już stanowi pewien tzw. code smell, a ta praktyka jeszcze pogarsza sytuację, "zarażając" singletoństwem Bogu ducha winny model.

Takie rozwiązanie zaszywa w klasie User szczegółową wiedzę na temat implementacji systemu (że jest jakiś Main, że jest jakiś user manager...), co łamie całe mnóstwo dobrych zasad: choćby zasadę pojedynczej odpowiedzialności, prawo Demeter, open/closed principle, separacji zagadnień itd.

Wprowadza przy tym cyrkularną zależność, bo UserManager potrzebuje klasy User, a klasa User potrzebuje (teraz) klasy UserManager.

Tak, wiem, znam i stosuję (chociaż nie w tym przypadku bo chciałem akurat trochę poeksperymentować :o)

W duchu takiej motywacji, patrz punkt pierwszy ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1