Pogledajte određenu poruku
Staro 12. 11. 2005.   #5
Ilija Studen
Direktor Kombinata
Invented the damn thing
 
Avatar Ilija Studen
 
Datum učlanjenja: 07.06.2005
Poruke: 2.669
Hvala: 44
119 "Hvala" u 64 poruka
Ilija Studen će postati "faca" uskoroIlija Studen će postati "faca" uskoro
Default

Ajmo opet redom:

1. <?= $ordered_product->getProductId() ?> - <?= $ordered_product['productId]; ?>

Koristim Propel, najbolji persistance layer za PHP (PHP port Torque projektu). Ideja je prilično jednostavna: na osnovu XML šeme se automatiski generišu sve potrebne klase i DDL. Dakle, sve te klase i relacije među njima za mene pravi skripta (potrebno vreme od 4 - 7 sekundi). Ja ih samo koristim. Za ručno pravljenje istih bilo bi mi potrebno par sati.

Pošto PHP5 ima podršku za enkapsulaciju ne mogu da pozivam $product->id; iz templatea jer je ID protected polje (kakvo i treba po OO konceptima). To je samo primer dobrog programiranja. Praktičnost je malo narušena, ali kad te metode dobiješ "džabe" (generisane su za tebe) onda nema šta da se brineš.

Persistance layeri (ORM) kao koncept je prilično jednostavni i normalni u svim "jačim" programskim jezicima, posebno u Javi. Mislim da bi trebalo da pročitaš malo više o njima... Meni sam Propel štedi 50% vremena koje sam ranije ulagao u razvoj (bez preuveličavanja).

Probaj, olakšava život.

2. Imaš tendenciju (a to sam ti već rekao) da komplikuješ stvari.

Moguće. Ali danas nešto za šta mi je ranije trebalo 2 nedelje radim za 2, 3 dana (opet bez preuveličavanja). Meni je bilo bitno da povećam sopstvenu produktivnost, u čemu sam uspeo.

Biraš alat prema svojim potrebama. Moje potrebe danas nisu da napravim nešto što će svaki hakeran koji bar malo zna PHP razumeti "iz prve". Bitno mi je da radim brže i da to bude jednostavno za održavanje (što jeste!).

3. 90% funckija u tvom kodu vracaju varijablu koja se zatim echo-uje.

Sasvim normalno. Navedeni primer je template koji služi za prezentovanje informacija. Tu je sasvim normalno da se podaci "u 90% slučajeva echuju" Kontroler koji pokazuje ovaj template izgleda ovako:

PHP kôd:
/**
* Show cart content
*
* @access public
* @param void
* @return null
*/
function cart() {
  
  
// Empty cart?
  
if(CartService::instance()->countProducts() < 1) {
    
flash_error('Your cart is empty');
    
$this->redirectTo('shopping''index');
  } 
// if
  
// cart 
To je sva potrebna ligika + template da bi prikazao cart (Controler + View). Model je malo bogatiji, ali to te opet ne zanima jer je to generisao Propel a ti sa dve funkcije povezao

Da opet ponovim, jer ovo je bitno da biste razumeli šta i kako radim, funkcija gore i template na prethodnoj stranici je sve što programer treba da uradi da bi prikazao cart. Nema prenošenje mase promenljivih, rogobatnih funkcija i koječega sličnog. Najteži deo je generisan za njega od strane persistance layera i uvezan od strane frameworka. Fizikalisanje je zastarelo...

4. <?= $ordered_product->getProductId() ?> ... razmisljam da li on u toj funkciji čita iz baze, sa diska, ko zna šta radi.

Da li tebe kao dizajnera to zanima? Ne. Imaš API dokumentaciju i radiš po njoj... Ako voliš da gledaš u bazu onda koristiš sledeći metod:

polje - id, funkcija - getId()
polje - name, funkcija - getName()
polje - first_name, funkcija - getFirstName()

...

Pattern je оčigledan

5. I onda tako imaš po jednu funkciju za svako polje u bazi

Tačnije, dve... Getter i setter (tkz. akcesori). Zbog enkapsulacije koja ti ne dozvolja da vidiš konkretno polje van trenutne klase ili klase naslednice Propel ti generiše getPolje() i setPolje($value) funkcije.

Naravno, te funkcije si dobio džabe, nisi ih ručno pisao.

6. CartService::instance()->getOrder()->getOrderedProducts() umesto $CartService->order->products;

Singleton je jedan od osnovnih patterna i omogućava ti da izbegneš prenošenje gomile promenljivih na sve strane. Izuzetno korisno i štedi vreme (zna ko je probao).

CartService je Singleton klasa.

7. Navedeni template...

Navedeni template je loš. To sam uvideo odmah... Eksperiment koji je pokazao da je nepraktičan. Sad koristim drugačiji pristup gde se templatei i layouti automatski mapiraju sa parom kontroler - akcija (takav pristup koristi Rails) osim ako nije navedeno drugačije.




PS: Da bi stvarno video koliko ovaj "komplikovani" pristup olakšava život i smanjuje količinu fizikalisanja treba da ga probaš. Sva ova objašnjenja što sam naveo će ti se najverovatnije učiniti neubedljiva, ali slobodno tvrdim, iz iskustva: nikad u životu nisam brže i lakše radio.


Dodatak:

Citat:
Iz mog iskustva (nesto obilnije od tvog) upotreba PHP na nacin na koji ti to radis je najblaze receno radikalna.
Pogledaj o čemu se ovde diskutuje (ne samo skorije diskusije već kopaj imalo dublje). OOP modelovanje aplikacija je starije od PHPa, a PHP5 napokon pruža bolje okruženje za OO razvoj što pokušavam da iskoristim. Ništa u mojim pristupima nije radikalno... Čak naprotiv, većina stvari je prilično stara.
Ilija Studen je offline   Odgovorite uz citat