Door
Ozzie PHP
op 21-05-2013 17:27
gewijzigd op 21-05-2013 17:28
839 views
Ola,
Ik heb een class die in sommige gevallen eigenlijk wat te veel methods heeft. In een aantal gevallen zal ik deze methods allemaal nodig hebben, maar in een aantal gevallen heb ik er slechts een paar nodig. Nu zit ik te denken om de class op te splitsen in een "volledige variant" en een "uitgeklede variant". De uitgeklede variant bevat dan de basis-methods, en de volledige variant bevat een aantal extra methods. De volledige variant wil ik dan de uitgeklede variant laten extenden.
Nu de vraag. Stel dat de huidige class Foo heet, wat zouden dan logische namen zijn voor de volledige variant en de uitgeklede variant? Bijv. zoiets als:
FooFull en FooEasy
FooComplex en FooSimple
Wie weet er een mooi naampje voor de beide classes?
@Wouter: nu wil ik het dus goed gaan doen en krijg ik zo'n reactie??????
Wouter J op 29/04/2013 11:00:27
Als je 2 klassen hebt die hetzelfde doen, alleen waarbij de 1 minder methods hebt dan moet je natuurlijk geen gebruik maken van 2 klassen, maar je moet gebruik maken van inheritance.
Wat doe ik niet goed dan???
[size=xsmall]Toevoeging op 21/05/2013 20:16:06:[/size]
@Eddy: de class niet opsplitsen dan? Is dat dan wel goed OOP?
[size=xsmall]Toevoeging op 21/05/2013 20:26:56:[/size]
Iemand die me kan uitleggen hoe het zit? Is het dan niet erg als een class "te veel" functies heeft, die je niet gebruikt? Of moet ik die class opsplitsen, en zo ja op welke manier? Wat is correct OOP? Zou fijn zijn als iemand dit even kan verduidelijken.
Kun je niet een voorbeeldcode laten zien Ozzie? Niet in alle gevallen moet het persé in meerdere classes. Zolang het overzichtelijk is en het klopt, kan het heel goed. Een model met koppeltabellen kun je theoretisch volledig opsplitsen in verschillende classes, maar wordt het daar dan overzichtelijker op? Waarschijnlijk niet...
Chris, thanks voor je reactie. Het gaat om een algemene class waarin ik variabele data kan opslaan, bijv. de gegevens die zijn gePOST, maar ook bijv. alle URLs binnen een project. Deze URLs komen uit een configuratiebestand en van tevoren weet ik dus precies welke URLs dat zijn. Deze URL's hoef ik feitelijk alleen toe te kunnen voegen en op te kunnen vragen.
Echter, als het bijv. gaat om POST data dan is vantevoren niet altijd duidelijk wat er allemaal gePOST is. Dan wil ik bijv. eerst kunnen opvragen of een bepaalde key wel bestaat, of ik wil bijv. kunnen opvragen hoeveel keys er aanwezig (en dus gePOST) zijn. En ook wil ik bijv. kunnen opvragen welke keys er ontbreken. En omdat ik niet wil dat de POST gegevens na het verzenden van het formulier kunnen worden gewijzigd, kan ik ook een lock() functie aanroepen waardoor er geen data kan worden toegevoegd of verwijderd. Maar al deze extra functies heb ik in het geval van bijv. URLs helemaal niet nodig. Die hoef ik namlijk alleen maar te kunnen adden/setten en getten.
Kortom, in sommige situaties heb ik dus maar weinig methods nodig (add/set en get) en in sommige situaties waar de inhoud van tevoren niet helemaal vaststaat, heb ik meer methods nodig.
En nu is dus mijn vraag of ik dan die class moet opsplitsen (en zo ja hoe) in een simpele variant en een uitgebreide variant?
@Eddy: de class niet opsplitsen dan? Is dat dan wel goed OOP?
Alsof dat OOP mij ook maar iets kan verteren, behalve het oxideren van mijn bips...
Ik weet wel dat er iets is al extents.
Je hebt je basis-class. En de andere functies (die in je 'full'-versie zitten) kan je wel/niet erbij extenden. Lijkt mij logischer...
Configuratiebestand is er voor gemaakt om variabele data te hebben. Dus kun je er vanuit gaan dat een url bestaat? Ikke denk van niet.
En verder zou ik dit inderdaad 2 andere klassen laten zijn, ze hebben namelijk totaal andere verantwoordelijkheden. Ik zou misschien niet eens aan inheritance denken.
Configuratiebestand is er voor gemaakt om variabele data te hebben. Dus kun je er vanuit gaan dat een url bestaat? Ikke denk van niet.
Nja, in dit geval wel. Ik zet zelf iets in het configbestand, en haal het daarna pas eruit :)
Wouter J op 21/05/2013 23:21:30
En verder zou ik dit inderdaad 2 andere klassen laten zijn, ze hebben namelijk totaal andere verantwoordelijkheden. Ik zou misschien niet eens aan inheritance denken.
Beiden classes slaan echter wel data op. Alleen de ene class is een soort "basis" class en de andere class heeft daar bovenop nog wat extra functies. De uitgebriede class zou dan de basis class kunnen extenden toch?
Weet jij een leuke naam voor de classes waaruit blijkt dat de ene de simpele versie is en de andere de uitgebreide versie?