MVC klasse. Controller eller model?

Tags:    php

Har oprettet en trå som denne før, men er åbenbart lidt tungnem og har lige brug for at slå det her helt på plads.
Er denne klasse controller eller model, eller overhovedet ikke MVC?
Fold kodeboks ind/udPHP kode 




Først og fremmest: hvorfor har du en tom constructor? Hvis der ikke er noget i den, er der vel ingen grund til at den skal optage kodelinier? :)

Dernæst: jeg vil hverken sige det er en controller eller en model. Jeg vil snarere kalde det et database-api - et lib, om du vil. Som dog kan gå hen og blive praktisk for modeller du skriver for fremtiden.

Med det sagt, så er PHP så løst et sprog, og konventionerne er så mange og forskellige, så der er ikke en enestående, fastlagt regel for, hvad der er hvad. Du kan godt lave en implementation af MVC andre synes er fjollet, og stadig være i din ret til at kalde det MVC. SÅlænge det overholder de overordnede principper i MVC.

Men, en model ville typisk være mere i denne retning:
Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 25.10.2008 14:06 af Bruger #8223
Ok, og en controller til denne blog ville være?



Ville være noget i stil med
Fold kodeboks ind/udPHP kode 

Koden burde være self-explanatory. Hvis der er sat en id, så vil controlleren hente data fra modellen omkring det specifikke id - hvis ikke, vil den hente de sidste ti entries istedet. Dernæst returnerer den dataene som et array, så et view kan bruge dem. fx blogview.php
Fold kodeboks ind/udPHP kode 


EDIT: Disclaimer: Det er ikke helt vildt sexet stillet op, og mange af tingene kan gøres bedre og mere effektivt - men jeg har forsøgt at stille det op på en måde så du forstår konceptet, uden at skulle pløje dig igennem tonsvis af linier og lange forklaringer.



Indlæg senest redigeret d. 25.10.2008 14:28 af Bruger #8223
Når man har forstået det basale koncept er det faktisk ret så enkelt. :)

Har skrevet et meget barberet setup som du måske kan analysere.
Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 25.10.2008 18:00 af Bruger #10216
Super! Tror faktisk næsten jeg har forstået det!
Men BTW: Hvilke funktioner ville man have lyst til at arve hver enkelt View, Controller eller Model? I skriver extends Controller, som tyder på at jeg allerede har et interface, eller en "interface-class" at benytte mig af, men hvilke funktioner ville i fx gøre så "globale"?



Tjah, viewet har måske nogle metoder til at hente en template fil. Controlleren styrer måske nogle request og response objekter. Og i stedet for at kalde action metoden direkte er der måske en metode der klarer det.
Men det hele afhænger sådan set af dit setup, da der ikke er nogen endelig løsning til dette.

Huske der er forskel på extends og implements. Den første arver og den anden implementere et interface der beskriver hvordan klassen skal se ud. :)



t