Jak żyć bez singeltona?

Odpowiedz Nowy wątek
2020-06-29 19:47

Rejestracja: 4 miesiące temu

Ostatnio: 2 tygodnie temu

0

Witam.
Jak w dużych projektach dajecie rade nie popaść w paranoje?
Posiadam główną klasę a w niej dostęp do klasy jakże super nazwanej Database a w niej kolekcje z mongodb.
Następnie mam obiekt A w którym jest trzymany obiekt B w którym trzymany jest obiekt C.
I teraz chcąc mieć dostęp z klasy C -> Database muszę wykonać getB().getA(),getMain().getDatabase();
Wygląda to dziwnie ale co ja mogę zrobić?

Pozostało 580 znaków

2020-07-01 17:37

Rejestracja: 4 miesiące temu

Ostatnio: 2 tygodnie temu

0

Dla przykładu:

  • moduł:
    • klasa bazodanowa
    • klasa trzymająca dane w pamięci(jeśli są potrzebne oczywiście)

Wtedy gdy np chce by załadowano jakieś dane to moduł powinien otrzymać dane od klasy bazodanowej i wrzucić je w klasę "trzymającą".
Dobrze mi zaświeciło?

Pozostało 580 znaków

2020-07-01 17:43

Rejestracja: 1 rok temu

Ostatnio: 2 godziny temu

1

A po co to trzymasz w pamięci? Chodzi o cache? Ja bym w tym przypadku zrobił repozytorium / klasę bazodanową i można to zwyczajnie opakować w dekorator keszujący który w miarę potrzeby zwróci obiekty albo z pamięci albo odwoła się do bazy
Jakiś przykład znaleziony na szybko w necie: http://www.beabetterdeveloper[...]/03/wanna-cache-decorate.html
Opakowaniem w cache może zająć się kontener DI, możesz też zrobić interceptor uaktywniany adnotacją i rozszerzyć tę logikę na inne obiekty.

Wszystko zależy od potrzeb. Najlepiej jakbyś dał kod całej aplikacji do review tutaj i na pewno posypie się tysiąc komentarzy jak to można zrobić na milion sposobów.


edytowany 1x, ostatnio: obscurity, 2020-07-01 17:45
Sorry, że tak późno ale mam pytanie. Posiadam klase odpowiadającą za cache userów i osobną za cache grup wraz z pozwoleniami, teraz przy ładowaniu userów muszę mu przydzielić daną grupę, to lepiej podać w konstruktorze tej klasy co ładuje userów dostęp do klasy cachującej grupy czy podawać w metodach. - MarekMareckiPL 2020-07-05 10:23

Pozostało 580 znaków

Odpowiedz

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