DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > PHP
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

PHP PHP aplikacije, Smarty, PEAR

Odgovori
 
Alati teme Način prikaza
Staro 21. 03. 2013.   #21
Djuki
profesionalac
Professional
 
Avatar Djuki
 
Datum učlanjenja: 09.06.2005
Lokacija: Pancevo
Poruke: 251
Hvala: 60
47 "Hvala" u 34 poruka
Djuki is on a distinguished road
Pošaljite ICQ poruku za Djuki Pošaljite poruku preko Skype™ za Djuki
Default

Citat:
Originalno napisao _korso_ Pogledajte poruku
Hteo bih samo da dodam jednu cinjenicu.
Trenutno radim na app koja ima oko 1200 klasa.....
Koji IoC/DI biblioteku koristiš ?
__________________
Blog | Facebook | Twitter | PHP Srbija
Djuki je offline   Odgovorite uz citat
Staro 21. 03. 2013.   #22
_korso_
profesionalac
Qualified
 
Avatar _korso_
 
Datum učlanjenja: 21.06.2007
Poruke: 166
Hvala: 27
42 "Hvala" u 23 poruka
_korso_ is on a distinguished road
Default

Custom pravljena. Bazirana je na prvoj verziji sf DI komponente.
__________________
Twitter
_korso_ je offline   Odgovorite uz citat
Staro 21. 03. 2013.   #23
webarto
expert
Grand Master
 
Avatar webarto
 
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
webarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished road
Default

@_korso_ Svaka čast. O tome pričam.
__________________
Github // LinkedIn // PHP // ZCE // Stackoverflow PHP // Site5 Web Hosting
webarto je offline   Odgovorite uz citat
Staro 21. 03. 2013.   #24
Djuki
profesionalac
Professional
 
Avatar Djuki
 
Datum učlanjenja: 09.06.2005
Lokacija: Pancevo
Poruke: 251
Hvala: 60
47 "Hvala" u 34 poruka
Djuki is on a distinguished road
Pošaljite ICQ poruku za Djuki Pošaljite poruku preko Skype™ za Djuki
Default

_korso_ i webarto Hvala na odgovoru.

Jel može mali snipet koda u kojem IoC isporučuje objekat koji je uvek jedna te ista instanca ?

Mislim na klijentski deo, ne sama IoC implemenacija.
__________________
Blog | Facebook | Twitter | PHP Srbija
Djuki je offline   Odgovorite uz citat
Staro 21. 03. 2013.   #25
webarto
expert
Grand Master
 
Avatar webarto
 
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
webarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished road
Default

@Djuki ne želim da ispadne da sam ja zapeo za nešto, ali za svaki "zašto koristiti singleton" mogu naći (možda) bolju alternativu. Static ima svoju svrhu koja se često zloupotrebi.

@jablan nije se dobro izrazio, Foo:: je uvijek Foo, a kada je $foo-> onda onda može biti i Bar
https://gist.github.com/nikic/5213689 obrati pažnju na "me", i da, ima 18 godina, dobio je respekt radi ovakvih stvari a ne zato što je glasan.
To su funkcije, a PHP takođe ima i builtin klase.. daleko da je sve od savršenog. PHP > Java said by C++ guys

@mangia tako se i radi u većini slučajeva.
__________________
Github // LinkedIn // PHP // ZCE // Stackoverflow PHP // Site5 Web Hosting
webarto je offline   Odgovorite uz citat
Staro 21. 03. 2013.   #26
_korso_
profesionalac
Qualified
 
Avatar _korso_
 
Datum učlanjenja: 21.06.2007
Poruke: 166
Hvala: 27
42 "Hvala" u 23 poruka
_korso_ is on a distinguished road
Default

@Djuki Naravno.

Primer je timer klasa koja meri vremena u requestu, od toga koliko se izvrsavaju upiti (svaki pojedinacno jer postoje dve baze Postgres i Mongo koje se istovremeno koriste), do toga koliko se izvrsavaju odredjene metode koje imaju zahtevan posao da odrade (opet u Domain delu appa), te i sam request. Idealan primer za upotrebu singleton klase.

PHP kôd:
//sys.timer servis - konfiguracija
1. $serviceContainer
    
->register('sys.timer''OP\Library\Utilities\SysTimer')
    ->
setArguments(['request_time'$kernel->getRequestStartTime()])
    ->
setShared(true);// I

//negde u kodu koji kreira druge servis objekte koji koriste servis konfigurisan u 1.
2. $serviceContainer->getService('sys.timer'/*, II */);

3.
class PgPdoAdapter {
    public function 
__construct(SysTimer $timer) {}
}

class 
MongoAdapter {
    public function 
__construct(SysTimer $timer) {}
}

class 
ShutdownHandler {
    public function 
__construct(SysTimer $timer) {}
}

class 
ContactsRepository {
    public function 
setSysTimer(SysTimer $timer) {}

Dakle, svaki "service" kako nazivamo ove objekte konfigurisane kroz ServiceContainer, je po defaultu ne deljen. Zato u 1. imamo liniju I. Svaki poziv za tim objektom kao u 2. ce vratiti istu instancu SysTimer objekta. Ukoliko zelimo da nam uvek poziv 2. vraca razlicit novo kreirani objekat, onda mozemo da izostavimo u 1. liniju I.

Ono sto sam stavio u 2. kao II je - prvobitno je bilo moguce da u samom pozivu prosledimo da li je instanca deljena (da li je singleton-like ili ne). I ovakva konfiguracija prilikom poziva `getService` metode ima prednost u odnosu na konfiguraciju 1. u liniji I. Medjutim, ispostavilo se je da ovakva fleksibilnost koja je na prvi pogled primamljiva, za kasnije odrzavanje je nocna mora - jer moramo da pratimo `getService` pozive (mada uglavnom ih ima po 1 za odredjeni servis). Posle nekog vremena je ta funkcionalnost izbacena, gde je zakljucak bio - ako nam ovako nesto treba, ili nesto ne radimo kako treba ili jednostavno sam objekat nije singleton-like.

U 3. mozes videti da je servis opcionalan za ContactsRepository klasu pa se injectuje kroz setter.

Bilo kako bilo, ovo je samo vrh ledenog brega oko koriscenja DI prakse za kreiranje grafa objekata.

I za kraj bih rekao svoje iskustvo povodom koriscenja DI prakse u zadnje 2 godine. Iskreno, prvo sam bio skeptik. Java mi se smucila (licno i subjektivno misljenje), a ovo je dosta slicno sto sam tamo radio. Medjutim, pokazalo se u praksi kao odlicno resenje, ali... Nije bas lako za objasniti svima, trazi dosta discipline, izgleda komplikovano. Sto "tezi" objekat, veca konfiguracija. Ovaj primer koji sam dao je najprostiji moguci. Sama konfiguracija je dosta komplikovana za nekog ko prvi put gleda u sam kod. Sa klijent strane se uvek svodi na `getService`. Planirao sam da pogledam kako to rade u nekim drugim jezicima koji imaju totalno drugu viziju. I oni imaju iste probleme.

Interesantan je pristup u javascript svetu AngularJs-a. Oni "skeniraju" i parsuju kod pre izvrsavanja. Kako svi dependency se deklarisu u konstruktoru po nekom kvazi tipu, sam Angular na osnovu toga radi magiju i ne treba ti konfiguracija. On sam zakljucuje sta treba da radi i koji servis treba da kreira prvo. Mada i Angular ima Javu za uzor (tj. sam Misko - http://misko.hevery.com - je glavni autor). Nije ovo tesko izvesti, probao sam sa DI komponentom - gore pomenutom. Ali su pitanje, performanse - gde mora neko kesiranje, kao i to da konstruktori mogu biti sa *mnogo* objekata - sto mi se ne svidja. Slican fora je i sa requireJs-om.

Sve u svemu, ovo radi odlican posao, ali ono sto mu nedostaje je malo manja kompleksnost i eventualno malo manje konfiguracije.
__________________
Twitter
_korso_ je offline   Odgovorite uz citat
2 članova zahvaljuje _korso_ za poruku:
Staro 21. 03. 2013.   #27
_korso_
profesionalac
Qualified
 
Avatar _korso_
 
Datum učlanjenja: 21.06.2007
Poruke: 166
Hvala: 27
42 "Hvala" u 23 poruka
_korso_ is on a distinguished road
Default

@webarto
100% se slazem sa tobom sto se tice Nikite Popova. Momak koji samo cuti i radi. Mozda i najmanje eksponiran u PHP zajednici. Salje RFC za RFC-om. Ostali mnogo iskusniji i stariji samo s*** po mailing listama i sta god neko kasvetno predlozi, tu su da ga svojim negativnim glasom zakopaju, kao bi ocuvali j*** BC verzije koja je stara 10 godina kao i "cuvene" PHP native f-je radi vizije koju PHP ima po njima. Zalosno je sto su oni nekako slozni kada najbolje stvari mogu da pokvare svojim glasovima.

Koliko pratim, mnogima se smucio taj "prizvuk" u core PHP zajednici - dok ovaj decko, ne preza. Odmah stigne neki drugi RFC, patch ili nesto trece. Zbog tog pros*** mnogih, pitanje je i PHP dokle ce stici.

Da trenutno nismo u firmi vezani za PHP i skoro pa je nemoguce promeniti platformu barem u narednih godinu dana, iz ovih stopa bih uzeo nesto drugo.
__________________
Twitter
_korso_ je offline   Odgovorite uz citat
Staro 22. 03. 2013.   #28
svlada
član
Certified
 
Datum učlanjenja: 02.03.2007
Lokacija: Novi Beograd
Poruke: 53
Hvala: 8
10 "Hvala" u 4 poruka
svlada is on a distinguished road
Pošaljite poruku preko MSN za svlada Pošaljite poruku preko Skype™ za svlada
Default

Citat:
Originalno napisao Djuki Pogledajte poruku
_korso_ i webarto Hvala na odgovoru.

Jel može mali snipet koda u kojem IoC isporučuje objekat koji je uvek jedna te ista instanca ?

Mislim na klijentski deo, ne sama IoC implemenacija.
U Springu je default ponašanje da container vraća uvek istu istancu objekta (singleton scope), što je i logično jer kontroleri, servisi, dao sloj obično nemaju neko stanje.
__________________
http://www.svlada.com
svlada je offline   Odgovorite uz citat
Odgovori


Alati teme
Način prikaza

Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum


Vreme je GMT +2. Trenutno vreme je 22:59.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.