dedlfix: HTTP-Cache

Beitrag lesen

echo $begrüßung;

HTTPCache::get($url);
Hm, wenn man nun ein RDBMS bemühen möchte (z.B. weil man innerhalb eines CMS alles mit einem RDBMS speichert) müsste man sowieso irgendwie Zugangsdaten übergeben (z.B. an den Konstruktor).

Eine andere Möglichkeit wäre noch: HTTPCache::setup(...);

Außerdem könnte man auch mehrere URLs abrufen wollen, da wäre ein Objekt meines Erachtens auch praktischer.

Ja, wenn diese Aufrufe innerhalb _einer_ Funktion stattfinden. Wenn sie über das ganze Script verteilt sind, müsste man dann zu Methoden greifen, wie: jedes Mal ein neues Objekt erstellen, eins global ablegen, sich selbst ein Singleton erstellen, ...

Wenn ich nun das ganze umdrehen würde, also von HTTPCache erbe könnte ich, ohne den Quellcode von HTTPCache.class.php zu verändern mehrere unterschiedliche DBMSe verwenden (HTTPCacheDB ist ein solches).

Ich würde das vielleicht so implementieren: Die Klasse HTTPCache kümmert sich um den HTTP-Vorgang. Zum Ablegen der Seiten bedient sich HTTPCache einer "Storage-Engine" (Lass dich von dem Begriff nicht erschrecken, der klingt gefährlicher als er ist.) Die Storage-Engine weiß nichts weiter von HTTPCache. Sie stellt nur Methoden wie init() (oder Parameterübergabe im Konstruktor), get() und store() zur Verfügung. HTTPCache muss auch nicht von der Storage-Engine erben. Er erweitert nicht deren Funktionalität sondern bedient sich ihrer nur. Damit bleibt sie beliebig austauschbar. Du müsstest sonst jedes Mal von einer anderen Storage-Klasse erben.

Nehmen wir mal an, du hättest noch nichts da. In der Anfangsphase könnte die Storage-Engine aus wenigen Zeilen Code bestehen, die einfach nur Dummy-Funktionalität haben. get() gibt immer nur false zurück (daraufhin holt HTTPCache die Seite neu aus dem Netz - es soll ja erstmal nur der HTTP-Teil entstehen). store() verwirft das Übergebene und sagt true. Andere Methoden geben auch erstmal nur irgendwas zurück. Wenn HTTPCache soweit funktioniert kann man sich der Storage-Engine zuwenden.
Man braucht noch nicht mal HTTPCache zum Testen der Funktionalität. Ein paar Zeilen Code, der nur feste oder zufällige Werte übergibt und/oder anfordert, reicht um zu testen, ob die Storage-Engine ordentlich arbeitet.

Ob es nötig ist, eine Basisklasse für Storage-Engines zu schreiben? ... Gemeinsame Funktionalität, die also nicht jede Storage-Engine-Implementation anders realisiert, wird es wohl nicht geben. Man kann aber immerhin noch, wenn nötig, testen (beispielsweise beim Initialisieren der Storage-Engine in HTTPCache), ob ein von der Basisklasse abgeleitetes Objekt zurückgegeben wurde (is_a()).

echo "$verabschiedung $name";