Zmuszenie do korzystania z fabryki |
Zmuszenie do korzystania z fabryki |
26.06.2017, 13:27:30
Post
#1
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Witam,
Chce aby pewien zbior klas byl singletonem i nie mozna bylo ich klonowac. Stworzylem takze fabryke, za pomoca ktorej sa tworzone instancje. Wszystko dziala jak nalezy i w zasdzie pytanie rozchodzi sie jedynie o powtarzalnosc kodu. Aby nie zezwalac na klonowanie obiektu, wystarczy zzdefiniowac prywatna/chroniona metode __clone(). No i nie chcialbym teraz w wielu klasach powielac:
Z 2 strony jezeli wrzuce to do 1 klasy, ktora bede wszedzie rozszerzal, to po co mi OOP, skoro tak na prawde wszystkie klasy beda mialy dostep do metod chronionych, a nie wszedzie da sie uzyc private. Moze da sie to rozwiazac w jeszcze inny, ciekawy sposob? Czy moze nie powinienem sie tym przejmowac i ladowac do kazdej klasy powyzsza linijke z osobna? |
|
|
26.06.2017, 14:23:23
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Tak z czystej ciekawości co to za "zbiór klas, które mają być singletonami"? Generalnie kopiuj to do każdej z osobna bądź skorzystaj z traitsów.
|
|
|
26.06.2017, 14:25:45
Post
#3
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Np. obsluga bazy danych, konfiguracji globalnej, rejestr, ...
|
|
|
26.06.2017, 14:28:07
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 Dołączył: 27.12.2004 |
Baza danych nie powinna byc singletonem. Dosyc czesto w aplikacjacj korzysta sie z wielu baz danych
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
26.06.2017, 14:40:18
Post
#5
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
getDatabase() moze przyjmowac parametr, za pomoca ktorego okresla sie 'kanal'. Jak nie podasz parametru to zwraca ten sam objekt domyslnie, ale mozesz stworzyc inny. Tak czy inaczej, rzeczywiscie moze byc tak jak mowisz.
Co nie zmienia faktu ze jak juz robie taka fabryke, to nawet jesli jakas klasa ma nie byc singletonem, to pomyslalem ze warto to ujednolicic i uniemozliwic tworzenie obiektow bezposrednio za pomoca operatora new, a wymusic korzystanie z fabryki. Tylko wtedy majac 20 klas nie chcialbym powielac kodu. Traits wydaja sie byc ciekawym rozwiazaniem. W kazdej klasie moglbym dorzucic use commonTrait; o podobnej zawartosci:
tylko wtedy musialbym jeszcze obsluge parametrow dorzucic do tego. Ten post edytował q.michal 26.06.2017, 14:41:29 |
|
|
26.06.2017, 14:49:12
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Nie lepiej zacząć korzystać z jakiegoś service managera? Wtedy zawsze kiedy potrzebujesz zwraca 1 instancję.
-------------------- |
|
|
26.06.2017, 14:53:04
Post
#7
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
|
|
|
26.06.2017, 15:05:11
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Na przykładzie zenda https://github.com/zendframework/zend-servicemanager
-------------------- |
|
|
26.06.2017, 15:09:50
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) |
Dependency Injection + Dependency Injection Container - Google
Singleton to antywzorzec - stosujesz go zazwyczaj wtedy jak do już istniejącego kodu spaghetti chcesz dodać nowe, niezależne elementy. Jednak jak jeszcze masz mało praktyki to możesz śmiało go stosować - po pewnym czasie sam dojdziesz do tego, że korzystanie z Dependency Injection to jedyne rozsądne wyjście - mi to zajeło kilka lat. -------------------- |
|
|
27.06.2017, 07:57:41
Post
#10
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
|
|
|
Wersja Lo-Fi | Aktualny czas: 15.05.2024 - 04:44 |