login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Model gedeelte in MVC pattern

Offline Grayen - 14/08/2007 22:18 (laatste wijziging 14/08/2007 22:19)
Avatar van GrayenPHP ver gevorderde Ik ben momenteel bezig om mijn framework over te zetten naar het MVC pattern. Eerst had ik een aantal classes, die riep ik gewoon simpelweg aan in mijn controllers (waren toen geen classes). Hierbij was het alsnog vaak dat ik steeds weer hetzelfde moest tikken, daarom ben ik uit eindelijk overgestapt naar het MVC pattern, omdat je dan alles met behulp van classes doet.

De "view" is voor mij zeer duidelijk, namelijk de html die weergeven moet worden. Ook de "controller" was voor mij snel duidelijk. Zijn taak is de gewenste actie van de bezoeker uitvoeren. De twee die ik tot dusver genoemd heb zijn overal bijna hetzelfde. De enige die ik anders zie is de "model".

Voordat ik een manier van het model ga toepassen wil ik er zeker van zijn dat ik het goed aanpak. Vandaar mijn vraag:

Hoe pakken jullie het model gedeelte van het MVC pattern aan? Voor elke tabel een class maken die de tabel representeert? Of enkele classes maken die database handelingen uitvoeren en voor elke tabel kunnen worden gebruikt (dus je moet bij elke functie aangeven voor welke tabel de handeling bedoelt is)? Of hebben jullie nog andere manieren?

9 antwoorden

Gesponsorde links
Offline marten - 14/08/2007 22:23
Avatar van marten Beheerder Ik maak voor elke tabel een model met hierin alle functies die ik voor die tabel wil (inserten, deleten, updaten, kopieren enz enz)

voorbeeld wat ik altijd gebruik:
http://www.site...mp;id=1222
Offline Wim - 14/08/2007 22:35
Avatar van Wim Crew algemeen is het dan niet handiger om enkele classes te maken? deze kan je nl altijd hergebruiken (zoals bvb een pgsql classe)!

Ik kan grote delen van mijn code in een volgende website gewoon volledig kopiëren, maar mij lijkt dit niet te gaan met een data model...
Offline Grayen - 14/08/2007 22:48
Avatar van Grayen PHP ver gevorderde Bedankt voor je reacties .

@Marten
Ik zelf zal het in ieder geval niet zo gaan aanpakken, omdat je op deze wijze weinig waarvoor OOP bedoelt is eruit haalt, want nu moet je als nog een boel telkens opnieuw scripten, terwijl dit doormiddel van goed hergebruik onnodig zou zijn geweest.

@wimmarien
Daar zat ik zelf ook aan te denken. Maar dan behoudt ik wel het gebruik van Models, namelijk door het volgende te doen:

Als de standaard functies van mijn model-parent-class niet voldoende zijn, dan maak ik een aparte class aan, die waarbij nodige bepaalde functies van de model-parent-class overschrijft.

Dat lijkt mij tot dusver de meeste handige manier. Nog andere suggesties of misschien verbeteringen voor mijn idee?
Offline marten - 14/08/2007 22:51
Avatar van marten Beheerder
Grayen schreef:
Ik zelf zal het in ieder geval niet zo gaan aanpakken, omdat je op deze wijze weinig waarvoor OOP bedoelt is eruit haalt, want nu moet je als nog een boel telkens opnieuw scripten, terwijl dit doormiddel van goed hergebruik onnodig zou zijn geweest.


Ik heb het zo gemaakt dat ik alleen de classe variabelen hoef aan te passen 
Offline Grayen - 14/08/2007 23:03
Avatar van Grayen PHP ver gevorderde Dus.. het voorbeeld dat je me gaf was niet de manier hoe je momenteel te werk gaat? Want bij het voorbeeld moet je steeds als je bijvoorbeeld een nieuw model zou maken steeds weer die insert queries en update queries gaan scripten, terwijl deze in al jouw modellen (bijna) altijd op hetzelfde neerkomen, zijn dan wel queries voor andere tabellen met weer andere bijbehorende velden, maar je zou al die functies heel simpel kunnen samenvoegen, waarbij je bijvoorbeeld alleen:

  1. $this->insert('table', $_POST);


Zou hoeven te scripten.
Offline marten - 14/08/2007 23:05
Avatar van marten Beheerder Het voorbeeld is ongeveer hoe ik het doe. Die heb ik dynamisch gemaakt. De standaard functies staan in een hoofdclass. De models extend ik daarop.
Offline Stijn - 14/08/2007 23:10
Avatar van Stijn PHP expert Het probleem dat je zal tegenkomen zijn tabel relaties als je voor iedere tabel een aparte model maakt. In Zend Framework wordt dit zeer handig opgelost met dependTables waarin je de relaties defineert tussen de models (en dus de tabellen). Daarnaast raad ik aan om met PDO te werken omdat die al een heel deel van jou lasten overneemt. Het enige wat je moet doen is een soort parent class maken met functies als

-insert
-update
-fetch
-delete
-...

en iedere model extend dan die parent class.
Offline Grayen - 14/08/2007 23:11 (laatste wijziging 14/08/2007 23:15)
Avatar van Grayen PHP ver gevorderde @Marten
Ok, en hoe pak jij het eigenlijk aan met JOINS, heb je daar ook een aparte functie voor geschreven, of schrijf je deze nog altijd voluit in een query? In CakePHP hebben ze daar een mooie techniek voor gebruikt, maar ik ben niet van plan om het zo ingewikkeld aan te gaan pakken .

@Stijn
Dus Zend Framework, doet ongeveer hetzelfde als wat CakePHP doet met relaties tussen models? Hmm.. dan zal die methode toch wel de moeite waard zijn om proberen in mijn mini framework in te bouwen.
Offline Stijn - 14/08/2007 23:23
Avatar van Stijn PHP expert Mja ik ben iemand die graag een persoonlijk touch geeft aan iets en ben dus aan het uitvissen hoe ik zend framework en relaties met models beter kan maken. Een voorbeeldje van wat ik dacht uit te breiden in ZF:

  1. class Topics extends Zend_Db_Table
  2. {
  3. protected $_name = 'topics';
  4. }
  5.  
  6. class Reactions extens Zend_Db_Table
  7. {
  8. protected $_name = 'reactions';
  9. }
  10.  
  11. //in me controllers dan
  12. $topics = new Topics();
  13. $reactions = new Reactions
  14. $topics->relationWith( $reactions , 'topicID' , 'id' );
  15. $topics->relationFetch();
Beetje snel getypt wat ik dacht te doen. Zo moet ik geen hele relationship structuur schrijven.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.231s