Få kontroll på brukergrensesnittet i MVC
Jeg tenkte jeg skulle skrive litt om å bruke alternativ syntaks i view, “brukergrensesnittet” eller “HTML-mal” på godt norsk (alt ettersom), i det populære designmønsteret MVC. Men først en liten innføring i MVC, så dere som eventuelt er gal nok til å lese i bloggen min vet hva det går i.
MVC-modellen er delt inn i tre deler: Model, View og Controller. Det går ut på å dele inn din suppe av en kode inn i tre deler: data, visning og logikk. Poenget med oppdelingen er å gjøre koden enklere å vedlikeholde og bygge videre på. Eksempelvis en nettavis: artikler er data (model), HTML-kode og RSS-feeds som viser artikler er visning (view) og koden som får alt dette til å henge i sammen er logikken (controller). Det kan sammenlignes med et klesskap: Om alle dine klær ligger helt tilfeldig er det jævlig stress å finne den ene sokken du leter etter. Derfor er det vanlig praksis å sortere klær etter type. Sokker og undertøy for seg, skjorter og gensere for seg, osv. You get the point.
Visningen (view) skal ikke inneholde logikk. Visningen skal inneholde minst mulig PHP-kode. Den skal nemlig kunne brukes av folk som ikke kan PHP – designere f.eks. Det er imidlertid lett å la seg friste. Med alternativ syntaks i PHP kan man enklere holde seg selv i nakkeskinnet.
Jeg spinner videre på eksempelet om en nettavis og vi begynner med et nasty eksempel på hvordan man ikke skal gjøre det:

Som du sikkert ser skal dette forestille en liten del av noe som tilsynelatende skriver ut en liste med artikler. Om du ikke hører flyalarmen enda, så er det bra du leser dette. Dette er et eksempel på for mye PHP. Det er vanskelig å redigere HTML-en som er most inn i PHP-koden, og prøver man seg er det stor sannsynlighet for å få hodepine. Inntrykk (indentation) er heller ikke formet etter HTML-koden, men etter PHP-koden.
Så ser vi hvordan det ser ut med “alternativ syntaks” (finnes sikkert et bedre ord for det):

Legg merke til at jeg ikke starter med <?php. Der hvor vi må ha PHP bruker vi PHP-tags. Det som er alternativ syntaks her er måten foreach-løkken er åpnet og lukket på. Ikke spesielt pent i vanlig PHP-kode, men til HTML-maler er det perfekt. <?php endforeach; ?> er mye mer lettlest og forståelig enn <?php } ?>. Dette kan du bruke på if- og switch-setninger, while- og for-løkker også. Nå kan du lettere lage inntrykk som følger HTML-koden og ikke PHP-koden.
Trikset er å følge disse reglene når du lager HTML-maler (view):
- Bruk bare alternativ syntaks i PHP-koden.
- PHP-tags starter og slutter på samme linje.
- PHP inneholder ikke HTML.
- Kode som ikke klarer å følge disse enkle reglene har ikke noe her å gjøre.
All annen kode skal inn i model og controller – det er den koden man kaller logikk (eller data), og det har ingenting å gjøre i view-delen av MVC-modellen. Følg disse reglene og du er sikker på at du holder fingrene av fatet – samtidig som du lager lettlest og oversiktlig kode som personer med minimal PHP-kunnskaper kan redigere.
NB! Jeg har ikke funnet noen smart måte å legge inn kode i bloggen enda, <pre> ser bare tragisk ut og jeg er lat, så løsningen ble å klippe ut et bilde fra tekstbehandleren.
Av den grunn måtte jeg kutte ut htmlspecialchars() – det tok alt for mye plass!
Mer lesestoff:
- Alternative syntax for control structures
- Beyond The Template Engine
- Chapter 2 – Exploring Symfony’s Code: The MVC Pattern
Najs
PerArneSaab
19.08.08 at 00:04