He!

Ik me gister even een beetje in OOP bediept en uiteindelijk mijn eerste gastenboek in elkaar geknutselt.

Hij werkt, dat is al een positief punt, ik wil hem alleen graag even hier laten zien zodat de meer ervaren OOP mensen er wat commentaar op kunnen geven aangezien ik zelf nogal weinig ervaring heb met OOP.

Ik heb twee classes:
een mysql class, voor de connectie, selectie en query e.d
en de guestbook class, voor het gastenbook (who would have guessed)

Klik hier voor de mysql class
Klik hier voor de guestbook class

Verder heb ik nog:
index.php
new_entry.php

Zo dat zijn eigenlijk alle bestanden.
Een werkend voorbeeld is hier te zien

Ik hoop dat jullie me kunnen vertellen wat ik goed doe, maar vooral wat ik fout doe - en waarom - zodat ik het allemaal beter kan begrijpen.

Thanks!
Is er een view class nodig dan? Ik haal gewoon de entries uit Guestbook class.
Henk schreef op 14.10.2008 13:48
Is er een view class nodig dan? Ik haal gewoon de entries uit Guestbook class.

Dat hoort tot het [google]MVC[/google] concept design pattern.
Het MVC model is me onbekend eerlijk gezegd.

Heb ik nou zonder dat ik het weet de model en de controller gemaakt?

Is de mysql class de model en de guestbook class de controller?
miss leuk om in de script lib te zetten??
ik had graag wat op- of aanmerkingen op de classes. Dit is de eerste keer dat ik zoiets doe dus ik zou graag wat feedback op die twee classes hebben.

Over dat MVC model, dat moet ik ook maar een keertje uitproberen :P
ik denk niet dat die Mysql klasse veel nut heeft ;)
MVC is een model, je hoeft je er niet aan te houden.
Gooi de mysql class weg. Het is slechts een simpele wrapper van de mysql extensie van php. Gebruik gewoon de OOP methode van de mysqli of de PDO extensie. Deze class beperkt je alleen maar in je mogelijkheden.

Ik zou je properties (variabelen) van je Gastenboek class protected maken ipv private. Zo kan je later de Gasteboek class nog een keer extenden om extra mogelijkheden toe te voegen.

Bij get_pages() zou je bijvoorbeeld wel eerst kunnen controleren of $this->pages werkelijk is geset. Zo niet kan je eerst set_pages() aanroepen.
Je zou het bijvoorbeeld zou kunnen maken dat je set_pages niet in je constructor aanroept, maar bij de eerste keer dat je get_pages() aanroept. Stel nou dat nooit get_pages() wordt aangeroepen, wordt dus ook niet een extra query uitgevoerd.

set_pages() vind ik trouwens wel niet perfect gekozen. Bij een 'set' method verwacht je dat je een parameter kunt meegeven om een bepaalde property van je class een bepaalde waarde mee te geven. fetch_page_count() zou ik handiger vinden.

Je zou van $this->entriesPerPage; een public property kunnen maken zodat je later het aantal entries per pagina kunt aanpassen. Het zou nog mooier zijn als je die property protected houdt, en hem met een set method kunt setten.

Verder is het een leuk script! Het is natuurlijk nog niet écht OOP omdat je nog weinig met objecten werkt. Dan zou je van elke entry bijvoorbeeld een apart object (class) kunnen maken. met bijvoorbeeld de methods getAuthor(), getLength(), setMessage() die het bericht met een mysql query aanpast, etc.

@ rvw: MVC is meestal OOP, maar OOP != MVC
Oke! Thanks Arjan, op dat soort posts zit ik te wachten!

Ik denk dus dat die mysql class de deur uit gaat. Dan maar met PDO aan de gang.

Wat je zegt over get_pages(), set_pages() en $entriesPerPage klopt wel, en die dingetjes kan ik ook makkelijk aanpassen.

Even over dat extenden: ik welke situatie kan ik het beste een nieuwe class aanmaken (dus guestbook extenden) en in welke situatie kan ik het beste gewoon een paar methods toevoegen aan de guestbook class?

En over een object per entry, hoe kan ik dat het beste doen?

Ik ga even aan de gang met je tips, hartstikke bedankt!

Reageren