get by id
Zo...
of zo...
Stel je wil meer dingen setten of getten (hint) heb je meer mogelijkheden. ;)
Wat ik me in het verlgende ook afvraag... zou jij dan de gegevens van de persoon meegeven via de constructors of via methods?
Dus:
of...
Ik zou allereerst een repository (datamapper) gebruiken:
En als ik dit niet zou doen dan zou ik Active Record gebruiken (factory):
Waarom ik vind dat jouw beide opties verkeerd zijn:
- Je initialiseert je object al voordat het bestaat. Je object bestaat namelijk pas zodra je het uit de DB hebt gehaald.
- Een constructor maakt een object klaar voor gebruikt. Het bevat de minst mogelijke parameters, alleen parameters die het écht nodig heeft dus. Een $id is het laatste wat ik van een User in een constructor zou zetten, een naam zou bijv. meer voor de hand liggen om in een constructor te gebruiken.
- Het User object staat compleet los van het hele database verhaal. Dat is helemaal niet aan de User object om zich daar zorgen over te maken, dat moet een andere class doen.
En als laatst, nu willen we alle users die een leeftijd hebben groter dan 18, doe jij dan:
Of?
Vind je dat ook niet een tikkeltje lelijk? :p
Toevoeging op 25/02/2014 23:53:52:
En nog iets, ik hou er altijd van om geen constructor te gebruiken, maar een factory method. Een persoon maak je niet, je doet er wat anders mee. Stel we praten over een bedrijf, dan huur je een persoon in.
Dus als antwoord op je verlengde vraag, ik zou doen:
Ik snap dat jij allerlei manieren gebruikt die je in de loop der tijd hebt opgepikt. En dat geldt voor mij hetzelfde :) Ik heb dus situaties gezien waarin users of producten als volgt worden opgehaald: $user = new User(18) of $product = new product(543). Dus zo raar is het niet.
Ook lijkt het me niet raar als je een user eerst leeg aanmaakt om vervolgens de properties te setten.
Maar vergeet even het database-verhaal. Stel ik wil een aantal eigenschappen toevoegen aan een user object. Denk aan naam, leeftijd, adres... doe je dat dan via setters, of doe je dat via de constructor?
Omdat Jip en Joost het doen is het niet raar? Ik heb genoeg sites gezien die tabellen gebruiken voor hun lay-out, dus zo raar is het niet als ik dat ook doe. Ik heb genoeg mensen OO zien gebruiken met alleen static functies, dus zo raar is het niet. Ik zie genoeg script zonder mysql_real_escape_string, dus zo raar is dat niet...
Nee, je moet bij jezelf gaan nadenken. Waarom gebruik ik deze methode? Wat als ik nu van database verander? Voldoet mijn code aan het SOLID principe? Jouw code faalt bijv. al bij de S van SOLID: Single Responsibility Principle. Jouw User object heeft nu meteen al 2 responsibilities: user vasthouden en omgaan met de database.
>> Denk aan naam, leeftijd, adres... doe je dat dan via setters, of doe je dat via de constructor?
Wil je het nou hebben over de database of over wat je in een constructor stopt en wat in een setter? Het maakt eigenlijk niet zo heel veel uit, beide onderwerpen heb je al in de treure door gediscussieerd in 1 van de 1000 OO topics van je...
Wil je wel of niet discussiëren Wouter?
http://www.phphulp.nl/php/forum/topic/databse-in-een-class-hoe/82977/
http://www.phphulp.nl/php/forum/topic/eigen-framework-beheersysteem/75343/10/#535756
http://www.phphulp.nl/php/forum/topic/oop-mapper/90530/
http://www.phphulp.nl/php/forum/topic/oop-mapper/90530/
http://www.phphulp.nl/php/forum/topic/oop-construct/89579/
http://www.phphulp.nl/php/forum/topic/setten-in-construct-of-in-aparte-functie/88454/
Als je je inbeeld dat de berichtjes allemaal net nieuw geschreven zijn door jou en mij dan lijkt het net of we aan het discussieren zijn... ;) (maar dan bespaard het mij zeeën van tijd..)
http://www.phphulp.nl/php/forum/topic/eigen-framework-beheersysteem/75343/10/#535756
http://www.phphulp.nl/php/forum/topic/oop-mapper/90530/
http://www.phphulp.nl/php/forum/topic/oop-mapper/90530/
http://www.phphulp.nl/php/forum/topic/oop-construct/89579/
http://www.phphulp.nl/php/forum/topic/setten-in-construct-of-in-aparte-functie/88454/
Als je je inbeeld dat de berichtjes allemaal net nieuw geschreven zijn door jou en mij dan lijkt het net of we aan het discussieren zijn... ;) (maar dan bespaard het mij zeeën van tijd..)
Gewijzigd op 26/02/2014 00:27:29 door Wouter J
Ja leuk... never mind...