Beste Mensen,

Ik zit met het volgend probleem:

Ik heb een class.
Bij deze class kan ik instellingen instellen. Die komen vervolgens in een config class of een array.

Maar deze class heeft ook 'geneste children'. Die moeten ook toegang hebben tot die instellingen. Op hun beurt hebben zij ook weer geneste subclassen, die ook toegang moeten hebben tot de instellingen.


Klein overzichtje

  
                                   hoofdclasse
                                       |
   |-------------------------|------|-----------------|
   child                       child               child
     |                             |                    |
|---|---|------|         |----|--|----|        |----|-----|
child child  child    child child child   child child child


Eigenlijk zijn het zelfs nog vier lagen. Maar elk object moet toegang hebben tot dat ene config object/array.

Nu kan ik, als ik een config object maak, van die config een static maken, zodat ik gewoon Layout_Config::get('key'); kan doen ofzo... maar het nadeel is dat je dan eigenlijk maar één config object kunt maken, wat dus niet echt handig is...

een tweede optie is bij de constructor van elk child de opties via een parameter meegeven, maar dat lijkt mij ook niet echt handig...

Daarom vroeg ik me af of hier niet een handig oplossing voor is...

ja oke... maar het is niet echt voor bijvoorbeeld de hele site ofzo... het zijn eigenlijk gewoon een paar parameters van het hoofdobject... die de child classes moeten kunnen benaderen..
Doorgeven via de constructor geeft meer flexibiliteit, en geeft je de mogelijkheid om je child klassen op andere plekken te hergebruiken, al dan niet met een andere, voor die plek toepasselijke, config.

Persoonlijk vind ik singleton net zo erg als globals, of eigenlijk erger. Je hebt de vervelende global state van je applicatie plots - dwz de state van het ene object heeft direct invloed op al die objecten die ermee gekoppeld zijn - en je hebt een keiharde koppeling tussen klassen. De klassen die jouw singleton klasse aanroepen bevatten de naam van die klasse. Je kan die singleton-klasse nu niet meer hernoemen of extenden, en je kan de andere klassen niet meer gebruiken zonder de singleton klasse. Dat, in combinatie met het delen van een state, levert het verplicht delen van een state, wat weer zo ongeveer neer komt op... globals.
Ik had het inderdaad eerst op de singleton manier, maar ik merkte al snel, wat Jelmer al zei, dat de hele flexibiliteit naar de knoppe ging, dus ik geef hem nu maar door via de constructor..

Reageren