Adskillelse af logik og præsentation ?

Tags:    php

<< < 12 > >>
Hvordan adskiller man sin logik fra sit præsentationslag med PHP og de mest gængse frameworks ?



Er ikke sikker på at jeg forstod det, men lav altid beregninger øverst i dokumentet og præsentation, der hvor det nu skal klares.



Jeg antager at cake-php framworket er nogenlunde gæns, og det bygger på MVC.

cakephp.org




Zend har et view objekt man bruge. Sjovt nok kaldet Zend_View, dertil er der Zend_Layout.
CakePHP har noget tilsvarende og lige ledes har Symfony.

Disse går i sin enkelthed ud på at du instansiere dem i logikkens abstraktionslag. Ved disse frameworks er det egentlig også PHP der bruges. Men har da set et par eksempler hvor man bruger xml og xslt. Til de tre ovennævnte er der også udviklet broer mellem deres view komponenter og template-systemet Smarty.

Hvis du søger på MVC, finder du den mest brugte metode på hvordan implementering af 3-lags modellen foregår i PHP.



Hej,

Du kan f.eks. lave det i klasser.
Hvis du har et sted hvor du henter nogle produkter frem på din side, fra en tabel som ser ud som følgende:
Fold kodeboks ind/udSQL kode 


Kan du f.eks. lave en ProductDAO klasse, som håndtere dette. DAO står for Data Access Object. (Læs mere om DAOs her: http://en.wikipedia.org/wiki/Data_Access_Object )

Denne klasse vil så håndtere al din sql logik osv.
f.eks. laver vi et Product objekt, som skal indeholde produkt data, og en ProductDAO som henter data ud fra databasen:

Product: (i filen product.class.php)
Fold kodeboks ind/udPHP kode 


ProductDAO: (i filen productDAO.class.php)
Fold kodeboks ind/udPHP kode 


Herefter kan du så have en side hvor du bruger det, hvor du før i tiden måske skrev følgende:

old_view_product.php:
Fold kodeboks ind/udPHP kode 


Koden til den nye view product side kunne så være følgende:
new_view_product.php:
Fold kodeboks ind/udPHP kode 


Der er lidt mere kodning i denne måde, men du har ikke alle mulige sql sætninger og database connections alle steder i din kode, og kun eet sted du skal rette, hvis noget går galt.
Hvis du så tænker lidt videre, kan du f.eks. lave en indkøbskurv objekt, som kan beregne priser, lave ordre (og ordre linjer) i databasen. Alt sammen på et lukket sted, med kode som kun skal opdateres der...

Håber at du kunne bruge det.

Var lidt fesen at jokke ind i en anden diskussion og stille dit sprøgsmål :P



Som jeg kan se det kan du ikke undgå at lave noget "plumbing" kode imellem dit præsentationslag og din business/data lag.

I Jimmis eksempel her, er der stadigvæk en del PHP kode direkte i præsentationen - kan jeg slippe af med det ?

Det første vi skal være enige om er vel, at det
ikke er særlig pænt at have HTML sammen med sin program kode. Det er en af ideérne med at dele sin applikation op i lag.

Så hvordan kan jeg slippe af med så meget PHP i min præsentation som muligt. Jo mere der skal ske på min side des mere PHP i toppen af siden må der ligsom være - korrekt ?

Så konklussionen må dog være at du ikke kan undgå at have en del PHP på hver side du skal bruge ?



Så konklussionen må dog være at du ikke kan undgå at have en del PHP på hver side du skal bruge ?

Forkert konklusion.

Hvis du bruger et MVC-framework kan du slippe fuldstændigt for PHP i dine views.

Prøv ad, istedet for at drage konklusioner ud fra andres kode.

Kig evt. på http://codeigniter.com/tutorials/ for en lille smagsprøve. men ellers vil jeg anbefale dig at prøve dig frem selv.



Et MVC framework vil kun til dels fjerne php koden fra dine views. I CakePHP.org, bruger de jo MVC, men selv her er der jo stadigvæk brug for at løbe objekter med data igennem for at lave noget indhold på siden...

Du kan jo altid kaste dig igang med smarty og bruge endnu et template framework til at fjerne php kode fra dine views, men så skal du bare lære deres syntax at kende... så... Lad være med at forkaste php helt i dine views, bare lad være med at lave business logic i dem.



Jeg udemærket MVC modellen :)

Jeg skal bare lige være helt med på hvad du siger: Slipper du fuldstændigt for at skrive PHP sammen med HTML når du bruger dette framework ? Hvordan vil du så præsentere noget i browseren ?

I såfald vil jeg gerne se hvordan du bære dig ad med det :)



CodeIgniter har Smarty inkluderet, så du kan skrive en smule Smarty-kode i dine views istedet for php-kode. Det er kønnere, mere overskueligt, men en lille smule langsommere.



Jeg udemærket MVC modellen :)

Jeg skal bare lige være helt med på hvad du siger: Slipper du fuldstændigt for at skrive PHP sammen med HTML når du bruger dette framework ? Hvordan vil du så præsentere noget i browseren ?

I såfald vil jeg gerne se hvordan du bære dig ad med det :)


Nej, du slipper ikke helt af med php hvis du bruger smarty/codeigniter. Du kommer til at skrive kode i dine views, uanset om det er med smarty syntax eller almindelig php.

Jeg har prøvet smarty, og jeg synes ikke personligt det gjorde mit view bedre.

Hele problematikken ligger jo også i, om dine designere skal skrive lidt php (lidt løkker, ifs osv) eller om de skal gøre det samme i smarty.

f.eks. skal du skrive følgende for at bruge en løkke i smarty:
Fold kodeboks ind/udPHP kode 


Hvor imod du skal gøre følgende i almindelig php:
Fold kodeboks ind/udPHP kode 


Men det er jo hvad du selv vil.

Du kan læse mere om smarty her: http://www.smarty.net
Så kan du jo selv drage en konklusion om det er godt eller skidt.



<< < 12 > >>
t