„Správný“ Lazy loading služeb
- thunderbuff
- Člen | 164
Snažím se najít nějaké dobré řešení lazy loadingu při použití DI. Pročetl jsem toto forum, phpFashion a Planette. To, co někdo vyzvedne hned někdo jiný haní. Existuje nějaký „opravdu správný“ přístup?
- Tharos
- Člen | 1030
Opravdu správný přístup™ není moc smysluplný obrat, protože dost záleží, jaké jsou Tvé požadavky a podle jakých kritérií přístup hodnotíš. :)
To, co asi chceš, by ale měl elegantně řešit návrhový vzor Proxy (tady, tady a tady).
Aby ses neupsal, je žádoucí takového zástupce vytvořit pouze pro služby, u kterých to má smysl.
- duke
- Člen | 650
Myslím, že @thunderbuff se ptal spíše na lazy loading při použití DI (nejspíše ve vztahu k Nette DI Containeru) než na lazy loading samotný.
V Nette bohužel platí, že jakmile si do konfigu zadefinuješ službu s dalšími závislostmi, tak se při jejím vytvoření vytvoří i všechny její předané závislosti. Tj. automatický lazy-loading poskytovaný Nette DI Containerem je automatický jen v první úrovni (služba se vytvoří, až když si pro ni sáhnu). V podúrovních již nejde o lazy loading (jakmile si pro ni sáhnu, vytvoří se nejen ona, ale i všechny její závislé služby včetně těch, které se nikdy nepoužijí). Tzn. pro ty podúrovně už je třeba řešit autoloading ručně, tzn. nejlépe používat proxy objekty pro služby, jak o tom mluví @Tharos.
Asi je to takto řešené kvůli omezením samotného PHP. Vím, že v některých jiných jazycích jsou nástroje, které toto umožňují řešit lépe. Víc by k tomu asi mohl říct @dg.