- Ízléses lett a Drop kompakt, vezeték nélküli klaviatúrja
- Jól felszerelt, csúcskategóriás külső videokártya jött a Gigabyte zászlaja alatt
- Gamescom 2025: Limitált szériás Godlike X lap és más finomságok az MSI-nél
- Leégett az első Radeon a hírhedt 12V-2x6 tápkonnektorral
- India betiltja a pénzalapú online játékokat
- Leégett az első Radeon a hírhedt 12V-2x6 tápkonnektorral
- Amlogic S905, S912 processzoros készülékek
- Melyik tápegységet vegyem?
- Kormányok / autós szimulátorok topikja
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- Bambu Lab 3D nyomtatók
- Az előírások megszegése miatt éghet le egyes alaplapokon a Socket AM5 foglalat
- TCL LCD és LED TV-k
- HiFi műszaki szemmel - sztereó hangrendszerek
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
válasz
Peter Kiss #9919 üzenetére
Találtam egy jó összefoglalót arról, hogy miért is NEM feltétlenül indokolt a Singletonok használata (amiről tulajdonképpen Te is beszélsz):
http://gooh.posterous.com/singletons-in-php
"Singletons are not unique snowflakes
In languages where objects live in an application server, Singletons can be used to keep memory usage low. Instead of creating two objects, you reference an existing instance from the globally shared application memory. In PHP there is no such application memory. A Singleton created in one Request lives for exactly that request. A Singleton created in another Request done at the same time will still be a completely different instance. And it will occupy it's own memory. Those instances are not linked to each other. They are completely isolated, because PHP is a Shared-Nothing architecture. You do not have one single unique instance, but many similar instances in parallel processes. Thus, one of the two main purposes of a Singleton is not applicable.Don't construct twice, it's all right
Advocates of the Singleton in PHP often argue it's still useful to be able to limit an instance within a single request. The aforementioned database classes being the most prominent example. But the much easier solution would be simply not to instantiate a second instance. If anyone can make sure there is just one instance, it's the developer. If you need to have the same instance in many classes, use Dependency Injection. Just create one, inject everywhere. That will also save you the hassle of deconstructing your Singleton once you notice you need a second instance of it all of a sudden.
Another example where Singletons are often applied but don't make sense is classes like FrontControllers. While conceptually it makes sense to say "There may be only one FrontController", it is superfluous to ensure it from an architectural viewpoint. A FrontController is usually instantiated only once in your application's control flow anyway. If you don't write a new Foo; anywhere else, you already made sure there is just one instance. So you ain't gonna need the Singleton here. Don't express concepts in your code that are never used.Don't shoot yourself in the foot
The Singleton's other purpose (to have a global access point to the instance) is undesirable in PHP. The desire for that usually stems from having an architecture where objects pull in their dependencies. Like any globals and statics, the Singleton's getInstance() method creates coupling to the global scope. This makes Unit-Testing harder. There is ways to mitigate this, but in general, the cost to mitigate is higher than to simply avoid the Singleton in favor of Dependency Injection. This is especially true in those situations, where the Singleton is applied but never instantiated twice anyway."Itt van egy hosszabb témázás magyarul erről:
http://weblabor.hu/blog/20100727/php-egyke-ososztaly============
Hadd mondjak ellenérvet is (már úgyis megszokhattátok, hogy ez a rész is mindig jön a hsz.-eimben
):
[link]
Pont ez jutott nekem is eszembe elsőként, amit itt írnak az elfogadott válaszban, hogy pl. egy Logging class esetén tipikusan jól használható egy Singleton osztály, mert ott felesleges tesztelésekről beszélni (valszeg nem a naplózásért felelős osztály a legfontosabb, amit tesztelni kellene), plusz teljesen elfogadható lehet ennek a mintának az alkalmazása, mert más módon szépen összehozni a rendszerrel feleslegesen macerás lehet.Saját példa az, hogy bizonyos esetekben csak nagyon macerás módon, adott esetben a teljes rendszer újratervezésével lehetne normálisan beépíteni a rendszerbe egy több helyen szükséges változó Singleton nélküli használatát - tipikusan olyan rendszerekre gondolok, ahol jelenleg még nem elsősorban az OOP-szemléletet követik, hanem egyelőre inkább globális függvényekét (bár van elmozdulás az OOP irányába): mint a Drupal.
Más megoldás nyilván a globális változók használata, ami tulajdonképpen hasonló lehet a Singletonokhoz, de kicsit mégis más. Pl. Drupalnál szükségem volt már ilyenre: [link].A másik: csak hogy egy kicsit pontosítsunk, a Singleton-osztályok használata elsősorban PHP-nél felesleges. Aztán más nyelveknél vannak bőven kivételek, mint pl. egy ablakkezelő objektum használata.
Ettől függetlenül tényleg fennáll, hogy a lehető legritkább esetekben szabad használni, alapvetően a már említett szempontok miatt kerülendő. Főleg PHP-nél (lásd az idézett cikket).
===
DE további ajánlott linkek:
http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons
Új hozzászólás Aktív témák
- Dobta az OLED kijelzőt a Honor MagicPad 3
- Kerékpárosok, bringások ide!
- Leégett az első Radeon a hírhedt 12V-2x6 tápkonnektorral
- Gitáros topic
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Amlogic S905, S912 processzoros készülékek
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Lakáshitel, lakásvásárlás
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Melyik tápegységet vegyem?
- További aktív témák...
- 14900k-hoz keresek delid kittet vagy valakit BP-en akinek van és használhatnám a sajátját!
- AMD AM5 Ryzen7 Win11 FullHD gamingPC 2-3év garanciával (8700G/4060Ti/32GB/1TB M2/WiFi6/BT/Win11)
- Exclusive ajánlat! Eladó Dobozos 14" colos LG GRAM 14 i7-1165G7/16gb ram/512SSD nincs 1kg!
- DJI Mini 4 pro Fly More Combo FMC RC2 drón új állapotban
- DJI Mini 4 pro Fly More Combo RC2 drón 6 akkumulátorral - Garancia, Care Refresh
- MacBook felvásárlás!! Macbook, Macbook Air, Macbook Pro
- LG 55B4 - 55" OLED - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - PS5 és Xbox Ready
- DDR5 8/ 16/ 32GB 4800-5600MHz SODIMM laptop RAM, több db- számla, garancia
- Csere-Beszámítás! Garancia! Steam Deck OLED 1TB Kézikonzol!
- Telefon felvásárlás!! iPhone 14/iPhone 14 Plus/iPhone 14 Pro/iPhone 14 Pro Max
Állásajánlatok
Cég: FOTC
Város: Budapest