Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.

[es] :: PHP :: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.

Strane: < .. 1 2 3 4 5 6

[ Pregleda: 28191 | Odgovora: 101 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.16.06.2010. u 01:23 - pre 168 meseci
Citat:
Goran Rakić: @mitke013, ostali:

Deluje mi da je ovde između ostalog problem da se razume ideja Responsibility-driven design OOP projektovanja i ideja Separation of concerns modularnog programiranja.

Na primer, ona tvoja metoda sa četvrte strane koja koristi $_COOKIE je glupost teška. $_COOKIE podatak tu mora da bude ubrizgan spolja u stanje objekta, a ne da objekat posegne napolje u kontekst. U tom trenutku si ubio svaku enkapsulaciju koja je važan koncept.

Glupost? Prilicno teska rec od nekoga ko nije postavio nijedan primer koda. Ako si vec samoproklamovani guru (mozda i jesi, ne znam), zasto ne postavis neke primere koda kako bih razumeo? Najlakse je obrisati gomilu mojih postova jer se ne slazes za mnom; daj da vidimo i konkretan razlog.
Citat:

Naučio si neke ideje napamet (ono što si napisao o globalnim promenljivama, za šta se slažem) i ne vidiš dalje od njih. U ovom slučaju tvoj $_COOKIE nije ništa drugo nego globalna promenljiva. U diskusiji pišeš kilometarske postove sa jednim te istim kodom jer ti se tako čini kako imaš nove argumente, to je iritirajuće i naporno za čitanje.

Sto se tice tih napamet ideja, ti si jedan od onih koji samo ostavljaju linkove ka nekim tutorialima i definicijama. Ja sa druge strane kroz primer objasnjavam kako radim, a da si pogledao bolje, video bi da se isti kod bas i ne ponavlja toliko.
Citat:

Dobra tehnika koja će unaprediti kod koji pišeš je da razmišljaš o nekom korisniku dela aplikacije, jednog objekta. Šta je to što taj objekat radi? Koje podatke deli? Da li je stanje potpuno enkapsulirano u objektu ili se nešto ubrizgava spolja? Da li je objekat dovoljno modularan da nezavisno postoji?

Nezavisno? Ne razumem te; zasto ne bih imao zajednicke metode u basemodel klasi ako tu istu metodu dele svi objekti? Konkretno iz posta koji si obrisao je metoda getTitle(). Jel treba da je ponavljam 32 puta zato sto imam 32 klase?
Citat:

Drugi savet je da malo zaboraviš na ORM, jer ORM != OOP.

ORM ima ružnu naviku da spoji tvoj objekat domena (ono sa čim radiš u aplikaciji) i reprezentaciju tog objekta u bazi podataka, što ja osim u najjednostavnijim slučajevima tumačim kao dve potpuno različite stvari.
Citat:

Ne vidim nista lose u tome da klasa (npr. Category) ima svoje logicke funkcije dok se BaseCategory stara o reprezentaciji u bazi. Reci mi sta fali ovom pristupu?
Citat:

Da bi SoC živela u kodu, objekti moraju da budu neuvezani (coupling). Ovim teškim nasleđivanjem i stapanjem slojeva, uz razrušenu enkapsulaciju ti dobijaš izrazito spregnut sistem u kome nemaš šansi bilo šta da čačneš na infrastrukturnom polju.

Naveo sam primere; ti ne znas koliko je taj sistem spregnut ili nije.
Citat:

Brzinu razvoja vidiš samo zahvaljujući primeni Doctrine ORM-a, na račun brzine izvršavanja. Izgleda da imaš sreću da radiš samo sa jednostavnim modelima podataka, čim od njega do sada nisi dobio ospice.

I to sam postovao, ali si verovatno i to obrisao. 'Jednostavan model podataka' tesko da je mogucnost da svaki objekat moze, ali ne mora, biti visejezican i da jedna metoda getTitle() se sama brine o tome. Naravno, deep validacija prevoda se podrazumeva. Kako sam to resio? U mom 'nategnutom' sistemu objekat koji je visejezican ima metodu 'getTranslationRelation()'. Ok, cudan naziv, ali to je sve. Od tada pa nadalje, objekat je visejezican. Pored nove many2many klase tipa CategoryTranslation, apsolutno nijedna metoda vise nije potrebna.
U pravu si, vrlo nategnuto i tesko vezuje ruke nekom ko bi nastavio moj rad

ps.
kad si vec uhvatio zalet sa brisanjem mojih poruka, ostavi ovu bar do ujutru. Nema smisla ubiti je pre nego sto sunca vidi u zivotu

Druga stvar:
zato sto ti radis na drugaciji nacin, ne znaci da ja mozda nisam u pravu
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.16.06.2010. u 12:09 - pre 168 meseci
Teška reč reći za neki kod da je glupost? Jesi li uopšte pročitao objašnjenje zašto je to glupost i zašto je tvoja priča o enkapsulaciji potpuno bušna? Sinoć sam ti preko PP već odgovorio da ne radim cenzuru teme, prođi od početka do kraja kroz poruke i javi ako misliš da sam bilo gde prikrio tvoje mišljenje. Ponavljanje istih argumenata i kačenje gomile primera koji ne služe diskusiji neću da dozvolim.

Kada se govori o couplingu misli se samo na final klase (implicitno ili eksplicitno definisane). Naravno da apstraktna klasa nije objekat sama za sebe. To ponavljanje o kome ti pričaš niko nije pomenuo.

Ostatak poruke je irelevantan za diskusiju.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.17.06.2010. u 04:03 - pre 168 meseci
Citat:
Goran Rakić: Teška reč reći za neki kod da je glupost? Jesi li uopšte pročitao objašnjenje zašto je to glupost i zašto je tvoja priča o enkapsulaciji potpuno bušna?
Ostatak poruke je irelevantan za diskusiju.

Ok, ako je glupost, reci mi kako da uradim. I molim te, bez nekih dodatnih copy&paste definicija ili linkova, interesuje me bas konkretni primer gde metoda treba da vrati isRatable() na osnovu cookija, da li je posetioc ulogovan i da to nije njegova pesma.

Ako vec gresim i pisem 'gluposti', ajde da naucim nesto novo.
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.17.06.2010. u 11:55 - pre 168 meseci
Rekao sam ti već, ubrizgaj taj $_COOKIE['nesto'] spolja kao parametar metode. Nemoj da koristiš globalnu promenljivu unutar klase, to nije enkapsulacija, to je prikrivanje kompleksnosti i mazanje očiju.

Još bolje ako taj $_COOKIE predstavlja posetioca, penesi objekat posetioca ili sesije kao parametar.

Sada tvoja klasa ne izlazi više u globalni prostor da zahvati svoj kontekst. Drugo, pisanje unit testova je lakše jer sada možeš lepo da preneseš vrednost $_COOKIE i proveriš metod za različite situacije. Treće klasu možeš i da iskoristiš u kodu koji se ne izvršava preko veb servera i umesto $_COOKIE koristiš nešto drugo.

Razmisli i da li ti se isplati da refaktorišeš kod tako da ovaj uslov o logovanju izmestiš spolja, tj. da isReatable() proveri da li vlasnik pesme nije preneti korisnik i možda još neke druge uslove, a da grananje vršiš po uslovu ($user->isLogged() && $song->isReatable($user)). Onda iz nekog trećeg koda možeš da ignorišeš ovo o prijavi i skriptom oceniš pesme za korisnika Peru Perića ako nisu njegove, nešto što bez refaktorisanja ti ne možeš da izvedeš. To bi bilo poštovanje dogovora o nadležnostima. Pesmu ne zanima da li je korisnik prijavljen.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.17.06.2010. u 13:29 - pre 168 meseci
Izvini na povecem postu, ali mislim da je 100% vezan upravo za temu i da bi bio svima interesantan a ne samo tebi i meni:

Citat:
Goran Rakić: Rekao sam ti već, ubrizgaj taj $_COOKIE['nesto'] spolja kao parametar metode. Nemoj da koristiš globalnu promenljivu unutar klase, to nije enkapsulacija, to je prikrivanje kompleksnosti i mazanje očiju.

Prva verzija i jeste radila tako jer se ni meni u startu nije svidjalo da metoda uzima cookije. A onda sam ukapirao da je bezveze slati nesto sto metoda moze i sama da uzme, zar ne? Kao sto imam metodu User::isLogged() koja proverava session sama, tako sam ovde iskoristio kukije.
Pisanje testova je tako mnogo lakse jer metoda radi ono sto zelim; konkretno
Code:

{if $song->isRateable()}
//ispisi zvezdice za glasanje


Onaj ko nastavi moj program nema potrebe uopste da dodatno razmislja u kukijima i njihovim imenima, assign-u toga i slicno.

Drugo; ako mu od spolja posaljem kuki, ja onda moram da svuda ponavljam koji je to kuki, npr. $_COOKIE['votedsong_1'] ili slicno. Suvisno. Na moj nacin samo sam na jednom mestu rekao kako ce se kuki zvati i to je to. Plus, .tpl fajl je daleko pregledniji u odnosu na:
Code:

{if $song->isRateable($smarty.cookies.votedsong_1)}
//ispisi zvezdice za glasanje



Kad vec pricas o enkapsulaciji, evo njene definicije:
Citat:
encapsulation
2. The ability to provide users with a well-defined interface to a set of functions in a way which hides their internal workings. In object-oriented programming, the technique of keeping together data structures and the methods (procedures) which act on them.
(1998-09-07)


Obrati paznju na 'in a way which hides their internal workings'. Moj nacin upravo to i radi. Zamisli sada da radim na tvoj nacin, tj. da postoji metoda npr. Status::isSongRateable($song, $user, $cookie) kojoj bi slao te neophodne podatke.
Problemi:
1. Kad god se poziva metoda, moram da obracam paznju na redosled parametara
2. Testovi; nemoguca misija. Sta ako korisnik nije ulogovan? Znaci da bi u kontroleru (tj. testu) mora da $user konstantno postavljam na null
3. Jos veci zbrlj u .tpl-u koji bi pozivao tu metodu
4. Jednog dana ukapiram da je mozda bolje da $user bude zadnji parametar (samo primer). Onda moram da uradim refactoring SVAKOG mesta gde se ta metoda poziva!
5. Jednog dana pozelim dodatni uslov za mogucnost glasanja, npr. da samo odredjena grupa user-a moze da glasa (opet, samo primer). Opet refactoring svakog mesta gde se metoda poziva; moj nacin zahteva samo jednu liniju unutar metode Song::isRateable()

Pogledaj sta je enkapsulacija:
http://stackoverflow.com/quest...ion-with-simple-example-in-php
http://en.wikipedia.org/wiki/Information_Hiding
Citat:
Treće klasu možeš i da iskoristiš u kodu koji se ne izvršava preko veb servera i umesto $_COOKIE koristiš nešto drugo.

Izvini ovo nisam razumeo. Kako to mislis da se ne izvrsava preko web servera? Moj program ce se izvrsavati samo interno, u okviru jednog sajta, i nikada nece imati potrebu da ga neko sa strane pita da li se moze glasati za pesmu ili ne.
Ili te nisam razumeo, nikad nisam radio SOAP ili slicno. Ako mozes, pojasni mi, zaista me interesuje konkretan primer ili situacija (znaci ne ono; kad budes radio xxx godina, kasce ti se samo ili slicno )
Citat:
Razmisli i da li ti se isplati da refaktorišeš kod tako da ovaj uslov o logovanju izmestiš spolja, tj. da isReatable() proveri da li vlasnik pesme nije preneti korisnik i možda još neke druge uslove, a da grananje vršiš po uslovu ($user->isLogged() && $song->isReatable($user)). Onda iz nekog trećeg koda možeš da ignorišeš ovo o prijavi i skriptom oceniš pesme za korisnika Peru Perića ako nisu njegove, nešto što bez refaktorisanja ti ne možeš da izvedeš.

Uf... pogubio sam se. Ako mislis 'spolja' da to bude logika u kontroleru, to ne dolazi u obzir. Kontroler samo spaja logiku (model) i prikaz (view); ne vidim nikakav razlog da neku dodatnu logiku ubacujem i u kontroler.

Edit Goran Rakić: Code format. Rado bih i isekao drugu polovinu poruke i ovaj unit test jer mislim da ne govori apsolutno ništa novo ali ti si osetljiv na to pa će ostati.

Isekao ja, slobodno jos malo skrati. Trol u meni je nadvladao razum


[Ovu poruku je menjao Goran Rakić dana 17.06.2010. u 18:55 GMT+1]

[Ovu poruku je menjao mitke013 dana 19.06.2010. u 12:30 GMT+1]
 
Odgovor na temu

masinac_1
Novi Sad

Član broj: 260719
Poruke: 44
*.adsl-a-5.sezampro.rs.



Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 06:39 - pre 168 meseci
Hm, citao sam poslednjih 10-ak dana par tema na kojima se savetuje da se bezi od nekih stvari kao djavo od krsta.
Zasto je strasno ubaciti malo php-a u view html? Ili da php posalje par podataka js-u jer je tako mnooogo jednostavnije i brze u oderdjenoj situaciji. Ili da kontroler obavi koju logicku operacuju vise kako bi kasnije model bio potencijalno korisniji. Dobar primer je bas ovde za $_COOKIE.
Pravila postoje i ona kazu da treba izbegavati mesanje html-a i php-a, mesanje php-a i js-a, da model obavlja radnje prema instrukcijama koje mu daje kontroler (tj. poziva ga da radi nesto) a da pri tome kontoler "nema pojma" zasto, kako i sl. Ali sve je relativno, zavisi od situacije. Mislim da uopste nije strasno prekrsiti neko od ovih pravila ako postoji veliki razlog i ako se filozofija nece (bar ne mnogo) ugroziti i ako je to tako sitno i ocigledno da nece dovesti u zabunu onog ko kasnije nastavi da radi na projektu. A tu su i komentari izmedju ostalog.

Generalno voditi se idejom da se nesto uradi u sto manje linija koda (1-2) i preterivati u tome je vrlo slicno prebacivanju novcanika iz jednog dzepa u drugi i misleci da imas duplo vise kesa, samo sto je ovde novcanik u stvari supljina/prazno u kontroleru i modelu. Radnjama koje treba da se urade je samo promenjena lokacija i nista vise, one su i dalje prisutne. Ok je to da bi estetski bilo lepse, da bi bilo razumljivije ali se moze doci do gubitka funkcionalnosti tih modela ako se nesto sitno promeni u kotnroleru sto rezultuje zavlacenje u klase i menjanje svega i svacega, mozda i ponovno pisanje modela.
Recimo ovi kolacici su parametar od kog zavisi izlaz modela. Sta ako se ta ista logika kasnije bude obavljala u zavisnosti od nekog prugog parametra? Nece moci da se prosledi modelu, jer on sam trazi kolacice, ne ocekuje od taj parametar od kontrolera. Ako bi se pak deo logike stavio u kontroler pa da obradi kolacice i jasno kaze modelu sta da radi (trazi u bazi.. raducka na tome malo i posalje u view), onda bi taj model bio upotreblim i ako se promeni parametar od koga zavisi sta dalje.

Al', dobro, ne mora da znaci da je tacno samo zato sto ja vidim smisao u tome, ja sam jos uvek samo pocetnik :). Ali vidim da jos neki, mnogo iskusniji od mene, razmisljaju ovako, tako da mislim da sam u pravu za ovo iznad - html, js, php (nema veze sa ovom temom ali ima sa sustinom poslednjih postova) i bukvalno shvatanje da kontroler radi sto manje - skoro uvek nista.
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 11:35 - pre 168 meseci
Citat:
Recimo ovi kolacici su parametar od kog zavisi izlaz modela. Sta ako se ta ista logika kasnije bude obavljala u zavisnosti od nekog prugog parametra? Nece moci da se prosledi modelu, jer on sam trazi kolacice, ne ocekuje od taj parametar od kontrolera. Ako bi se pak deo logike stavio u kontroler pa da obradi kolacice i jasno kaze modelu sta da radi (trazi u bazi.. raducka na tome malo i posalje u view), onda bi taj model bio upotreblim i ako se promeni parametar od koga zavisi sta dalje.


Pa to i jeste poenta. Ako kolacice saljes svaki put kad ti treba neki info iz modela, a jednog dana odlucis da ti kolacic vise ne treba nego recimo informaciju o tome da je neko glasao cuvas u bazi, lakse je izmeniti jednu liniju u modelu nego 30 mesta odakle se ta metoda poziva.
Isto ti je i za $_SESSION. Sto bih stalno slao nesto sto model moze i sam da uzme? Konkretno se ova metoda poziva iz view dela, pa bi kod bio jos i totalno necitljiv.
 
Odgovor na temu

masinac_1
Novi Sad

Član broj: 260719
Poruke: 44
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 12:09 - pre 168 meseci
Pa nije problem da li model moze ili ne nego da li treba.
Ti svakako moras napisati par redova za prijem i obradu kolacica da bi se formirao (ili ne) upit ka bazi. Sam upit mora u model, sad je samo pitanje gde ces da prihvatis kolacice. Nece biti manje linija ako to stavis u model - bice isti broj, recimo minimalan da se operacija inicira.
Prema onome sto su meni objasnjavali (i u skladu je sa definicijama), rekao bih da kontroler treba da dodje do kolacica ili nekog drugog podatka/input sa client side, a ne model. Ako je bas frka da u kontroleru za tu akciju postoje 1-2 linije onda pozvati neki helper koji ce samo to da obavi i sta vrati poslati modelu.
Taj hepler jednostavno neces vise pozivati kada dodje do promene kljucnog parametra od kog zavisi sta se salje u view, model ce i dalje biti funkcionalan bez bilo kakvih izmena a u kontroleru ces imati tih 2 linije koje su vrlo bitne :).
Citat:
Wiki: The controller receives input and initiates a response by making calls on model objects. A controller accepts input from the user and instructs the model and viewport to perform actions based on that input.
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 13:16 - pre 168 meseci
Citat:
masinac_1
Prema onome sto su meni objasnjavali (i u skladu je sa definicijama), rekao bih da kontroler treba da dodje do kolacica ili nekog drugog podatka/input sa client side, a ne model. Ako je bas frka da u kontroleru za tu akciju postoje 1-2 linije onda pozvati neki helper koji ce samo to da obavi i sta vrati poslati modelu.


I meni su slicno objasnjavali za slanje $_SESSION['user_id'] klasi modela i dobili smo uzas od koda; refactoring toga je prakticno nemoguca misija zbog obima programa. Ako ti neko objasnjavao, ne znaci automatski da je i u pravu

Ok, generalno si u pravu; ni meni se ne svidja narocito ta ideja o $_COOKIES, ali je stvar ipak mnogo bolja nego da kolacic saljem kao parametar. Gle; u view delu programa se ta metoda poziva;
Code:

{foreach from=$allSongs item=song}
  {if $song->isRateable() }
   {include file='_common/rating.tpl'}  // ovo ce da iscrta zvezdice za glasanje
  {/if}
{/foreach}

Ovo je potpuno normalna situacija u view delu programa; petlja koja mi ispise sve pesme i za neke dozvoli da glasas ili ne. Stvarno nemam bolju ideju od ove da to uradim. Ako imas, veruj, promenicu, ali bez da dodajem logiku u kontroleru.


 
Odgovor na temu

masinac_1
Novi Sad

Član broj: 260719
Poruke: 44
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 13:53 - pre 168 meseci
Ovako bih ja to uradio.
Zvezdice postoje bez obzira da li se moze glasati ili ne. Uostalom lepse je kad se vide svuda a ne kad je isarano (ako je to lista pa jedna pesma ima zvezdice a druga nema - kontam da jeste zbog foreach). Uz to zvezdice mogu da prikazu i rejting (prve dve recimo jedne boje a ostale druge boje - rejting 2).

Znaci isRatable() bih uklonio iz view dela. Ubacio ajax za glasanje, onclick u sam tpl. Jedna java funkcija po ucitavanju stranice poredi id svakog elementa (pesme) sa kolacicima i ako ima poklapanja uklanja onclick pa posetioc moze da klikce koliko hoce. Dodao bih isRateble() u akciju koja se poziva nakon klika na zvezdicu za svaki slucaj.

I ono za rejtig, zvezdice razlicite boje - isto js moze da uradi. PHP samo napravi taj element a js mu promeni klasu kao sto uklanja onclick.

[Ovu poruku je menjao masinac_1 dana 19.06.2010. u 15:06 GMT+1]
 
Odgovor na temu

galahad
Slobodan Todorov
Radio-televizija Vojvodine,
Jack-Of-All-IT-Trades, Web redakcija
Novi Sad

Član broj: 20613
Poruke: 146
*.dynamic.isp.telekom.rs.

Jabber: galahad@elitesecurity.org
ICQ: 52020296
Sajt: www.todorowww.net


+4 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 14:14 - pre 168 meseci
Pratim temu od početka, al' reko' "aj' malo da zakuvam"

Koja je poenta OOP-a (odnosno kvazi-OOP) u jeziku koji nije OO?

Aj' da se ne lažemo, klase, objekti i sva ta čudesa itekako imaju smisla kada je u pitanju aplikacija, koju kad pokreneš radi. Ali kad je PHP u pitanju, PHP skripte nisu aplikacije koje stalno rade, već se pokreču, objekti kreiraju u letu, i po završetku rada - nestaju. A onda Jovo nanovo.

Kontam ja to, preglednije je kad postoje klase, i u njima su tematski grupisane funkcije (to što se zovu metodi, apsolutno ne menja činjenicu da je u pitanju funkcija; nije šija nego vrat). Ali me jako izluđuje kad ljudi krenu da pljuju recimo po proceduralnom programiranju, i kao OOP je majka svih stilova programiranja. Možda i jeste, ne ulazim u to šta je bolje... Ja sam programer, a posao programera je pre svega da napravi da nešto radi. Da li je on to uradio procedualno, objektno, ili kosmički, apsolutno je nebitno, klijentu posebno, ako program radi ono što treba da radi.

Što se tiče čitljivosti i šta ti ja znam... Čitljivo je i proceduralno, a i OO, AKO je dobro iskomentarisano i dokumentovano. Ako nije, džaba svi objekti na svetu, ako ne znaš šta oni rade... Pa zaboga, koliko godina su se isključivo proceduralni programi pisali? I to je neko održavao, ne? Dobra dokumentacija je majka...

Srećem se sa raznoraznim programima, koje su drugi radili, a na mene spalo da održavam, i tu ima svačega, a najmanje dobro dokumentovanog i OOP koda. Kada bih bio toliko isključiv, mogao bi da se oprostim od 90% posla koji mi dolazi.

Sve u svemu, kako kažu, "za dobru svinju nema loših pomija", tako i ja kažem, "za dobrog programera, ne postoji loš stil programiranja"...

Mislim da se to zaboravlja u poslednje vreme, svi su se nešto dali u dizajniranje, teoretisanje. Sedi prika lepo i programiraj, nije bitan način, bitno je da radi, i da je dobro dokumentovano...


EDIT:
I ja bih izbacio isRateable() iz view-a... Ionako po koncepciji, view prikazuje i samo prikazuje informacije, ne bavi se logikom... Sto masinac_1 rece, isto bih tako uradio...
- SKRati link - JaZaKraljevo.rs -

"I have never let my schooling interfere with my education." - Mark Twain
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 14:26 - pre 168 meseci
Citat:
masinac_1: Ovako bih ja to uradio.
Zvezdice postoje bez obzira da li se moze glasati ili ne. Uostalom lepse je kad se vide svuda a ne kad je isarano (ako je to lista pa jedna pesma ima zvezdice a druga nema - kontam da jeste zbog foreach). Uz to zvezdice mogu da prikazu i rejting (prve dve recimo jedne boje a ostale druge boje - rejting 2).

Znaci isRatable() bih uklonio iz view dela. Ubacio ajax za glasanje, onclick u sam tpl. Jedna java funkcija po ucitavanju stranice poredi id svakog elementa (pesme) sa kolacicima i ako ima poklapanja uklanja onclick pa posetioc moze da klikce koliko hoce. Dodao bih isRateble() u akciju koja se poziva nakon klika na zvezdicu za svaki slucaj.

I ono za rejtig, zvezdice razlicite boje - isto js moze da uradi. PHP samo napravi taj element a js mu promeni klasu kao sto uklanja onclick.

[Ovu poruku je menjao masinac_1 dana 19.06.2010. u 15:06 GMT+1]


Evo problemi u tom pristupu:
1. sajt mora da radi i bez javascripte; klijent tako trazi zbog mobilnih telefona
2. nema jave u sajtu
3. ovo za zvezdice; klijent trazi zvezdice preko kojih moze da se glasa, ili da se ispise procenat (bas broj da pise tipa 87%) ako ne moze da se glasa. Dok me placa, ne postavljam suvisna pitanja
4. mislim da je prevelika komplikacija raditi preko js-a tu proveru; znaci da bi za npr. 25 pesama po listi (koliko je trenutno podeseno) moralo 25 puta preko ajax-a da se pita moze li se glasati za pesmu ili ne. Suvise, suvise i komplikovano i sporo. Logiku drzim dalje od Javascript-e; meni ce biti razumljivo, ali tesko i nekom ko nastavi moj program.

Mislim da sam se jedino za**bao to sto koristim smarty. Da sam koristio php kao templating engine, programer bi imao code completition. Al jbg, sad me nesto mrzi da menjam 40-50 stranica minimum, sajt je povelik (masala )

ps.
glasanje radi na sledeci nacin: svaka zvezdica ima <a href="{//url za glasanje}" class="ajax" target="#rating" >{slika zvezde}</a>
Ovo je primer, nije bas ovako ali da lakse razumes.

Ako je iskljucena JS, klik na zvezdicu vodi na moj kontroler koji prvo 'glasa' za pesmu, a zatim opet ucita istu stranicu.
Ako je ukljucena JS, jQuery ce detektovati 'class="ajax"', pa ce preko ajax-a da pozove isti kontroler (kao i gore) koristeci 'href' atribut. Kontroler ce preko metode isAjax() znati da ovaj put treba da ispise SAMO rezultat u procentima, a ne celu stranicu. JS ce preko atributa 'target' taj odgovor ispisati u id="#rating". Sve skupa je oko 7 linija JS koda jer sam ubacio zatamnjivanje tog id-a dok rezultat ne stigne preko ajax-a.

 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 14:37 - pre 168 meseci
Citat:
galahad: Pratim temu od početka, al' reko' "aj' malo da zakuvam"
Koja je poenta OOP-a (odnosno kvazi-OOP) u jeziku koji nije OO?
...
Sve u svemu, kako kažu, "za dobru svinju nema loših pomija", tako i ja kažem, "za dobrog programera, ne postoji loš stil programiranja"...

Mislim da se to zaboravlja u poslednje vreme, svi su se nešto dali u dizajniranje, teoretisanje. Sedi prika lepo i programiraj, nije bitan način, bitno je da radi, i da je dobro dokumentovano...
EDIT:
I ja bih izbacio isRateable() iz view-a... Ionako po koncepciji, view prikazuje i samo prikazuje informacije, ne bavi se logikom... Sto masinac_1 rece, isto bih tako uradio...

Kako PHP nije oop?
To sto objekti nestaju nakon izvrsavanja skripte, isto je kao sto i funkcije i sve ostalo nestaje kad pises proceduralni kod. Ne razumem poentu. Drugo; da OOP nije bolji, ne bi svi frameworks-i i svi ozbiljni programi bili OOP. Ja zaista ne znam ni kako bi se izvrsilo testiranje (phpunit) proceduralnog koda, ali verovatno moze.
Citat:

Mislim da se to zaboravlja u poslednje vreme, svi su se nešto dali u dizajniranje, teoretisanje. Sedi prika lepo i programiraj, nije bitan način, bitno je da radi, i da je dobro dokumentovano..

Kod mene je drugaciji sistem jer uglavnom radim programe od nule. Vecina mojih klijenata je imala program koji 'radi', ali ga ne moze nastaviti niko sem originalnog autora. Uvek pokazujem moj program kad licitiram i dobijam posao bez problema jer imam taj minimalisticki pristup; sto manje koda, sto krace metode, bez parametara. Veruj, mnogo ljudi to ceni vise nego da program 'samo radi'.
Citat:

I ja bih izbacio isRateable() iz view-a... Ionako po koncepciji, view prikazuje i samo prikazuje informacije, ne bavi se logikom... Sto masinac_1 rece, isto bih tako uradio...

Nema problema, samo mi recite kako da izvedem to sto mi treba. I ja sam mnogo teoretisao oko ovoga, ali ne dolazim do bolje ideje od te. Masinac je predlozio JS, ali to ne dolazi u obzir jer sajt mora da radi i bez javascript-e. A i ne zelim da tako jednostavnu stvar zakomplikujem sa previse koda.
 
Odgovor na temu

masinac_1
Novi Sad

Član broj: 260719
Poruke: 44
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 14:40 - pre 168 meseci
Citat:
mitke013: za npr. 25 pesama po listi (koliko je trenutno podeseno) moralo 25 puta preko ajax-a da se pita moze li se glasati za pesmu ili ne. Suvise, suvise i komplikovano i sporo. Logiku drzim dalje od Javascript-e; meni ce biti razumljivo, ali tesko i nekom ko nastavi moj program.


Preko ajax-a samo glasanje, a uklanjanje onclick na osnovu kolacica - server nema pojma.
Ubacujes isRateble() u akciju u kontroleru koja se poziva kada se klikne na zvezdicu a ne za utvrdjivanje da li da je moguce onclick ili ne.

U svakom slucaju, radi kako ti kaze onaj ko te placa. Ja (pa i ostali cini mi se) komentarisem kako bi bilo ispravno, jednostavno i funckcionalno. :)
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 15:26 - pre 168 meseci
Citat:
masinac_1: Preko ajax-a samo glasanje, a uklanjanje onclick na osnovu kolacica - server nema pojma.
Ubacujes isRateble() u akciju u kontroleru koja se poziva kada se klikne na zvezdicu a ne za utvrdjivanje da li da je moguce onclick ili ne.

U svakom slucaju, radi kako ti kaze onaj ko te placa. Ja (pa i ostali cini mi se) komentarisem kako bi bilo ispravno, jednostavno i funckcionalno.


Razumemo se ko gluv i nem ; ako browser NEMA js (npr. neki mobilni telefoni), glasanje i dalje mora da radi. Kod pesama ce ili da ostavi mogucnost glasanja (preko tih zvezdica) ili ce samo da ispise procenat (87% i nista vise). Tvoj predlog zahteva ukljucenu JS kako bi se ili iscrtale zvezdice ili ispisao rezultat. Tako sam te razumeo.
ps:
pored cookies provere, metoda proverava jos i da li je korisnik ulogovan i da ulogovani korisnik nije vlasnik te pesme. Korisnik ne moze glasati za svoj fajl.
 
Odgovor na temu

masinac_1
Novi Sad

Član broj: 260719
Poruke: 44
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 15:37 - pre 168 meseci
Jasno mi je sta kazes. Nema js. Ok. :)
Naglasio sam u proslom postu samo to da se onclick omogucava u zavisnosti od kolacica a ne preko ajax-a pa server pa... itd. Ajax dolazi na red tek kada je moguc klik tj. kada se klikne.

Ako nema js onda tako kako radis i to je to. Jedino je pitanje gde ces da postavis prijem kolacica a gde logiku. Na tebi je odluka. :)
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.19.06.2010. u 15:43 - pre 168 meseci
Citat:
masinac_1: Jasno mi je sta kazes. Nema js. Ok.
Naglasio sam u proslom postu samo to da se onclick omogucava u zavisnosti od kolacica a ne preko ajax-a pa server pa... itd. Ajax dolazi na red tek kada je moguc klik tj. kada se klikne.

Ako nema js onda tako kako radis i to je to. Jedino je pitanje gde ces da postavis prijem kolacica a gde logiku. Na tebi je odluka.


Ok, nisam te razumeo; malo mi zaribao 'onclick'

Stavio sam tu logiku za kukije u model da ne bih morao svuda $object->isRateable($_COOKIES['song_' . $object->id]) ; jer bih onda morao i da saljem $_SESSION['user_id']. jbg... tezak je zivot nas umetnika

Posto je ovo otislo malo offtopic, mod bi uskoro mogao i da malo skrati pricu. Moju, verovatno sam opet previse nasiroko pricao
 
Odgovor na temu

masinac_1
Novi Sad

Član broj: 260719
Poruke: 44
*.adsl-3.sezampro.yu.



Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.21.06.2010. u 09:01 - pre 168 meseci
I sta je ustanovljeno vezano za pravilno OOP ? :) ...evo sta sam ja razumeo.

Grupisanje funckija u klasu i pozivanje pojedinih metoda bez pravljenja objekta nije OOP zbog odsustva objekta.
Isto takvo pozivanje nije strasno ako postoji objekat a potrebna je samo jedna mala metoda iz ogromne klase koja pozivanjem pravi veliki objekat (a nije potreban u tom momentu).
Ako postoji objekat i kroz njega se sve radi uz povremeno pristupanje metodi iz neke leve klase bez pravljenja objekat, postoje dakle klase i metode koje se koriste (u velikoj vecini slucajeva) preko $this to bi trebalo da bude OOP. Oscilacije i kompromisi mogu kod uciniti manje fleksibilnim, nepogodnim za nadogradju, razumevanje i slicno. Ali ako postoji objekat i postuje se filozofija OOP-a u osnovi, imamo metode i klase smisljeno rasporedjene i pristupa im se kako treba onda je i to OOP, samo los (zbog tih oscilacija).
Za MVC sam u poslednjih par postova rekao kako ga razumem, da ne ponavljam.

Jel tako?
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
178.22.216.*



+34 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.21.06.2010. u 12:55 - pre 168 meseci
Citat:
masinac_1: I sta je ustanovljeno vezano za pravilno OOP ? .


Ustanovljeno je sledece:
1. previse trolujem u slucaju nedostatka kofeina; sto rece moj tutor: radim na kafu i cigarete
2. ja sam zagovornik minimalistickog pristupa programiranju; sto iz obuke, sto iz iskustva, shvatio sam da se takav pristup uvek isplati. Kod je kraci, lakse se testira, mnogo se lakse radi refactoring
3. sem mene, ostatak komentatora preferira slanje parametara
4. bilo je takodje postova (mislim da su i oni stradali tokom poslednjeg ciscenja teme) gde je neko rekao da klase trebaju biti potpuno odvojene; to mi je suludo resenje jer program je (npr.) motor a klase su delovi tog motora. Samo zajednickim radom taj motor funkcionise. Konkretan primer je ono User::isLogged() koji interno poziva nekih 10-15 metoda mog programa (nije bitno zasto) u klasama Song, Category itd.... Ako bih krenuo tom logikom da tih 10 metoda ne sme da poziva metodu User::isLogged(), to znaci da bih 10 puta morao da napisem
Code:

public function imeMetode()
{
  if ( isset($_SESSION['user_id'] AND // ostatak uslova)
  // uradi nesto
}

Problem; ovde se proverava samo $_SESSION sto znaci da remember me funkcionalnost uopste ne postoji. Ako hocu i to jednog dana, onda moram da u svakoj od tih 10+ metoda ubacim i proveru stanja kukija. Za nije lakse:
Code:

public function imeMetode()
{
  if ( User::isLogged() AND // ostatak uslova)
  // uradi nesto
}

Poenta:
API je tu da sakrije interni rad. Sto bi gornju metodu trebalo uopste da zanima kako se proverava da li je korisnik ulogovan ili ne? Mozda pozelim da jednog dana koristim bazu za to?
5. mislim da ces morati da krenes od prve stranice. Pogledaj sta je ko rekao i zakljuci sam.
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.21.06.2010. u 19:24 - pre 168 meseci
MVC obrazac nije isto što OOP stil programiranja. Postoji posebna tema o MVC obrascu. (Obrisane dve poruke viška iz ove teme.)
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

[es] :: PHP :: Razlika izmedju grupisanja funkcija u klasu i pravilnije OOP programiranje.

Strane: < .. 1 2 3 4 5 6

[ Pregleda: 28191 | Odgovora: 101 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.