Toelichting
Mensen die verstand van zaken hebben, zullen waarschijnlijk vragen hebben bij deze topic-titel: Inderdaad, geen standaard Registery VS Singleton, maar Registery VS Factory!
Op dit moment ben ik bezig met het schrijven van een eigen MVC framework, wat voorlopig enkel de basis voorstelt. De meeste onderlinge relaties tussen (typen) classes heb ik in kaart gebracht, nu rest mij (voorlopig) nog één probleem.
De probleemstelling
Waar ik eerder altijd een Registery gebruikte, om
Singleton te voorkomen, wil ik dit nu gaan veranderen. Eerst wilde ik mijn Registery gaan uitbreiden om problemen ermee op te lossen, maar nadat dit eigenlijk niet lukte, ga ik nu over op een andere oplossing.
Een Registery is bedoeld als oplossing om Objecten door te geven aan verschillende andere Objecten, denk hierbij bijvoorbeeld aan het Database object. Maar met het idee in het achterhoofd dat meerdere database connecties mogelijk zijn, loopt deze techniek op een dood einde: Met een Registery moet de class die een database connectie nodig heeft zelf kiezen welke connectie hij nodig heeft, de omgedraaide wereld!
Ik werk met het MVC model. Ik heb me al bedacht: Zodra een andere connectie nodig is dan de standaard connectie, is dit zaak van de controller, en niet van de models. De controller zal dus hoe dan ook, connecties door moeten geven aan de models. Maar hoe? En hoe komt de controller aan de connectie?
(Verworpen) oplossingen
Er zijn enkele oplossingen waar ik al aan heb gedacht:
Singleton: Dit is geen mogelijkheid, zo kan er enkel één database connectie bestaan, dat willen we niet.
Registery: Dit is een mogelijkheid, maar hierdoor ontstaat de omgedraaide wereld: Een class moet zelf gaan kiezen welke connectie hij gebruikt, in plaats van dat hij een connectie mee krijgt.
Connecties meegeven: Dit zou kunnen, maar heel tijd alle connecties meegeven heb ik geen zin in. Zeker niet aan de controllers.
Een factory: Mijn voorlopige oplossing. Een factory houd de connecties bij, en wanneer je een connectie nodig hebt, haal je deze uit de factory. Bestaat de connectie al? Dan geeft hij deze mee, bestaat de connectie nog niet, wordt hij aangemaakt.
Mijn vraag aan jullie, hebben jullie nog andere oplossingen en of ideeën? Alle informatie is welkom!