hotti: Vereinfachung meines Blättermechanismus

Beitrag lesen

hi Enrico,

beispielsweise die konsequente Trennung von Steuerung, Datenbeschaffung und Datanaufbereitung, so wie es Tom angeschnitten hat.

Das kann ich nur unterstreichen ;)

Ich vermute, er meint, dass Tom meint, anhand einer übergebenen Seite die entsprechenden Zeilen auslese, separat die Steuerung und wieder separat die Ausgabe aufbereite.

Ja, im Prinzip: Die Anwendung/Dein Script bekommt die Daten aus bestimmten Strukturen oder verwendet bestimmte Methoden. Wo die Daten herkommen, ist egal, das kann mysql sein oder eine Datei. In der Anwendung selbst stehen keine SQL-Statements und auch keine Datei-Lese-Schreib-Funktionen, sondern es werden nur Funktionen/Methoden eines abstract Layers benutzt, Methoden eines abstract Layers, der die Verbindung zu einer DB oder zu einer Datei herstellt.

Das bringt einige Vorzüge, auch für einen Paginator. Mal angenommen, der Abstract Layer ist eine Klasse, wofür in Deiner Anwendung ein Objekt erstellt wird. Dem Konstruktor wird bspw. mitgegeben, wieviele Records per Page zu sehen sein sollen und ggf. ein Sortier- oder anderes Filterkriterium.

Dann gäbe es eine Methode, die aus der Datenhaltung ein Array fischt, diese Methode kriegt dann nur noch die Nummer der gewünschten Seite.

Natürlich kann der abstract Layer auch eine prozedural arbeitende Library sein.

In Perl, meiner bevorzugten Scriptsprache, sind diese abstract Layer meistens Tie-Klassen, die einen Hash, ein Array oder eine Referenz binden. In der Anwendung wird dann nur mit diesen Datenstrukturen gearbeitet, Beispiel in Perl:

  
344: tie %obj, 'ORM', %opts;     # Tie-Klasse als abstract Layer zur DB  
345: $obj{'/impressum'){title} = 'Ein neuer Titel für das Impressum';  

Mit der Wertzuweisung in Zeile 345 läuft im Hintergrund ein Insert/Update-Statement, ohne dass im Code der Anwendung SQL-Statements notiert sind.

So ungefähr sähe dann die Anwendung eines Paginators aus, der aus einer Kladde die Seite 33 zeigen soll:

  
 my $ref = $dbo->show_kladde( page => 33 );  

Wo bspw. vorher, bei der Objekterstellung $dbo mitgeteilt wurde, dass jede Seite 10 Records beinhalten soll.

Hotti