[oop] lege class
Nu vraag ik me iets vreemds af. Wat is nu wijsheid. Om voor de configuratie gebruik te maken van de algemene data class? Dus:
Of is het slimmer om toch een aparte Config class te maken die de Data class extend?
Nu hebben we wel een aparte Config class, maar deze is wel leeg. Er staan geen methods is. Wat zou jullie voorkeur hebben?
iemand?
2) Waar voor, behalve voor config, zou je de Data class nog willen voor gebruiken?
(dit is een slecht idee)
Omdat? Als je zegt dat iets een slecht idee is, dan is het wel prettig als je ook aangeeft waarom.
Die data class heeft gewoon wat algemene methods add,get,has,delete. Die kan ik bijv. ook gebruiken om paden in op te slaan, of routes en dat soort dingen. Een container class zeg maar.
Ik kan ook voor alle classes een aparte container class maken met dezelfde functies, maar dat lijk me in ieder geval niet echt slim.
Ozzie PHP op 09/03/2014 14:34:05:
>> (dit is een slecht idee)
Omdat? Als je zegt dat iets een slecht idee is, dan is het wel prettig als je ook aangeeft waarom.
Omdat? Als je zegt dat iets een slecht idee is, dan is het wel prettig als je ook aangeeft waarom.
Dan zou ik het wel prettig vinden als je eerst op m'n vragen antwoord voor je met zulke reacties gaat afkomen. Zo kan ik namelijk afleiden of het een goed, of, slecht idee is. Maar op het eerste zicht lijkt dit op een slecht idee. Vandaar mijn bericht.
Toevoeging op 09/03/2014 15:19:51:
Ozzie PHP op 09/03/2014 14:34:05:
Die data class heeft gewoon wat algemene methods add,get,has,delete. Die kan ik bijv. ook gebruiken om paden in op te slaan, of routes en dat soort dingen. Een container class zeg maar.
Je bedoelt een array in class vorm?
Zo zou je het kunnen zien. Je hebt een class property $data en dat is een array. Wil je iets uit die array hebben dan krijg je dus $config->get('foo').
>> Dan zou ik het wel prettig vinden als je eerst op m'n vragen antwoord voor je met zulke reacties gaat afkomen. Zo kan ik namelijk afleiden of het een goed, of, slecht idee is.
Dan moet je niet gelijk al zeggen dat het slecht is :) Krijg bijna een hartverzakking ;)
Ozzie PHP op 09/03/2014 15:22:58:
Dan moet je niet gelijk al zeggen dat het slecht is :) Krijg bijna een hartverzakking ;)
Dan krijg je wel snel een hartverzakking hoor....
Je gebruikt een container om meerdere values of objecten op te slaan. Daar gebruik je geen array voor. Misschien bij procedureel programmeren, maar bij OOP echt niet.
Nooit een array gebruiken? Oei, wat een veel te veel doorgedrukte object gedachte heb je. Het gaat bij OO niet om zoveel mogelijk objecten hebben, dat begrijp je hopelijk? Het gaat in OO om objecten te gebruiken waar nodig. Om het sterker te maken: zo min mogelijk objecten met de grootste SRP, dat is het doel van OO.
Dan zou ik Config implementeren ArrayAccess. Je wilt namelijk meestal voor ieder "data-object" een andere implementatie.
Toevoeging op 09/03/2014 15:34:18:
Wouter J op 09/03/2014 15:30:53:
Nooit een array gebruiken? Oei, wat een veel te veel doorgedrukte object gedachte heb je. Het gaat bij OO niet om zoveel mogelijk objecten hebben, dat begrijp je hopelijk? Het gaat in OO om objecten te gebruiken waar nodig. Om het sterker te maken: zo min mogelijk objecten met de grootste SRP, dat is het doel van OO.
Laten we ook al dan direct strings afschaffen, is ook geen OO ;-)
Dat zei ik dus niet :-/
Ik bedoel dat een array geen vervanging is voor een class.
We gaan toch niet dit doen $foo = $config['foo'], maar wel dit $foo = $config->get('foo'). Of ben ik nou gek?
>> Oke... dit is nu iets anders, je wilt nu een registry class maken?
Zo zou je het kunnen noemen als het dat makkelijker maakt om te begrijpen. In feite wil ik een class die bij elkaarhorende values/objecten vasthoudt. Ik wil bijv. een class die al mijn paden vasthoudt, en als ik dan het pad naar de images nodig heb, dan doe ik $paths->get('images').
>> Dan zou ik Config implementeren ArrayAccess. Je wilt namelijk meestal voor ieder "data-object" een andere implementatie.
Ik snap niet wat je hier mee bedoelt.
Zoek eens op wat ArrayAccess is dan.
Als Data#get() geen meerwaarde toevoegt behalve het uit een array halen zou ik gewoon lekker $config['foo'] doen. Een klasse als dit is zinloos:
Code (php)
En wat ArrayAccess hiermee te maken heeft is ook voor mij onduidelijk, dan ga je een object maken die om een array heen zit en die ga je vervolgens weer als array gebruiken. Leg mij dan eens het nut uit van dat object, raoul :P
Nu gaat het er mij dus om... ik heb dus zo'n algemene container. Stel dat ik die wil gebruiken om bijv. configuratiesettings in op te slaan, gebruik ik dan die algemene container? Of maak ik een nieuwe (lege) Config class die de algemene container extend?
Toevoeging op 09/03/2014 15:54:30:
@Wouter
>> Een klasse als dit is zinloos:
Mwa, dat vind ik niet. Ik werk liever met een container object dat andere values of objecten vasthoudt dan met een array. Bovendien kun je bij het gebruik van een array geen exceptions gooien.
Bovendien vind ik dit mooier...
... dan dit:
Maar goed, wellicht is dat een kwestie van smaak.
Gewijzigd op 09/03/2014 15:55:02 door Ozzie PHP
Waarom? Wat voor toegevoegde waarde biedt dat ten opzichte van een array, behalve dat je het er mooier uit van zien? (gewoon uit interesse, je weet mijn mening over dit onderwerp toch al :P)
P.s. wat is precies een element in een array? Is dat hetzelfde als een value, of is het de combinatie van key en value?
Alles in classes? Ik hoop het niet. Plaats het in klasses wanneer nodig, wanneer je bijv. de waarde eerst moet valideren voordat hij in de array komt. Of wanneer je altijd een error wilt wanneer je 2 dezelfde IDs in een array zet.
Quote:
Nu gaat het er mij dus om... ik heb dus zo'n algemene container. Stel dat ik die wil gebruiken om bijv. configuratiesettings in op te slaan, gebruik ik dan die algemene container? Of maak ik een nieuwe (lege) Config class die de algemene container extend?
Ozzie PHP op 09/03/2014 17:51:50:
Jij bent altijd degene die zegt dat je alles in classes moet stoppen. Nu doe ik dat, is het weer niet goed?
Wat lekker ondankbaar weer hoor ;')....
Je weet je antwoord op je vraag wél al. We zitten het hier al de hele tijd te verkondigen.
Neen: in dit geval heb je geen speciale klasse nodig. Jij gaat niet akkoord met ons, stop dan met vragen stellen en doe het zoals jij het wilt.
Gewijzigd op 09/03/2014 20:05:29 door - Raoul -
Nee, eigenlijk niet.
Ik zal m'n vraag eens anders proberen te stellen. Stel, je hebt een algemene class Foo die iets doet. Nu wil je die algemene class gebruiken voor een specifieke toepassing. Als ik dit vertaal in een voorbeeld, krijg je bijvoorbeeld dit. Het gaat niet om het exacte idee, maar om de gedachte.
Stel we hebben een algemene class Auto. Die kunnen we gewoon ergens voor gebruiken: $auto = new Auto(). Nu wil ik op een gegeven moment een Ford maken, maar die class is hetzelfde als de class Auto. Dus ik zou kunnen zeggen $ford = new Auto(). Ik zou ook een class Ford kunnen maken die ik de class Auto laat extenden en waar ik verder geen andere methods in plaats. Of misschien is het het handigst om de Auto class abstract te maken. Daar zat ik dus even over te denken. Maar laat anders maar zitten, ik verzin wel wat... thanks voor het meedenken in ieder geval.
Gewijzigd op 09/03/2014 20:47:48 door Dos Moonen