Ola mensen,

Ik ben een cacher aan 't maken en vraag me af of jullie nog tips hebben.

Als ik gegevens cache dan wil ik een 'id' meegeven en de gegevens zelf:
$cacher->save('foo', $foo);

Nu vraag ik me af of het bijvoorbeeld slim is om, d.m.v. een 3e parameter, aan te geven WAT ik cache. Stel ik cache bijvoorbeeld wat configuratiegegevens, is het dan slim om zoiets te doen:
$cacher->save('foo', $foo, CACHER::CONFIG);

En als ik een complete view cache, dan zoiets:
$cacher->save('foo', $foo, CACHER::VIEW);

Waarom ik me dit afvraag is hetvolgende. Ik cache nu alles in bestanden. Ik kan me voorstellen dat het handig is om gecachte view bestanden in een aparte map te zetten. Of stel dat ik ooit configuratiegegevens in de database wil opslaan, dan weet ik precies wanneer het om configuratiegegevens gaat omdat ik die 3e parameter heb meegegeven. Slim idee of niet? Nog andere tips?
Tip: zorg dat je een CacheInterface of iets dergelijks hebt. Dan maak je bijvoorbeeld een ViewCache en een ConfigCache die de CacheInterface class implementeert. Zorg dat je implementatie flexibel genoeg is.
Hey Raoul,

Dankjewel voor je reactie. Is er een verschil tussen de manier die jij beschrijft (verschillende cacher classes voor verschillende typen content) en de manier die ik beschreef (1 cacher, maar aangeven om wat voor type content het gaat)? Is het een beter dan het ander?
Dit hoort niet 1 cache klasse te doen, maar meerde cache klassen. Ook hoort de cache klasse helemaal niet te weten wat hij opslaat, hij slaat het alleen op. Die constants zijn dus echt uit den boze.

Wat je het beste kunt doen is wat algemene cache klassen maken, FileCache, DatabaseCache, OpCache, ApcCache, etc. Vervolgens maak je voor verschillende cache taken verschillende cacher services aan. Je krijgt dan bijv, een cache.view service die een FileCache zo configureerd dat het in de juiste dir wordt opgeslagen. Ook heb je een cache.config welke een FileCache voor een andere dir is, maar dat kun je later altijd aanpassen naar een database.

En natuurlijk hebben al deze klassen een interface, want dat is de basis van DI
Oké, duidelijk verhaal. Thanks.

Reageren