Leser: 27
2013-10-13T10:08:59 rosti
QuoteDie Inkompatibilitäten des im Perl-Core eingebauten Serializers Storable und auch DB_File, brachte mich dazu, Serializer zu entwickeln, die plattformunabhängig und darüber hinaus versionsunabhängig sind.
1 2 3 4 5 6 7 8 9 10 11 12
# Pseudocode des Frontends # aktueller Datensatz in der db-Klasse = der Datensatz der vor "1984", "Orwell" in der Matrix steht. @temp = db->get_next_row(); print $temp[1]; >>> Orwell $temp[1] = „George Orwell“; db->set_row(@temp); db->get_next_row(); #zum Test ein Sprung nach vorne in der db db->get_previous_row(); # und wieder zurück zum '1984' Datensatz print $temp[1]; >>> George Orwell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
my %dbconf=( db_file => 'buecher.db', row_names => qw(Autor Titel Jahr Seiten), auto_update => 0, ); my $db = db->new(%dbconf); if(my $elm=$db->get_first_eq('Autor','Orwell')) { $elm->set('Autor','George Orwell'), $db->update(); } for my $elm ($db->get_all_regexp('Autor',qr/georg/i)) { print join( ',', $elm->get('Titel','Jahr','Autor') )."\n"; } my $first=$db->get_by_pos(100); die("Zeile 100 existiert nicht!") unless defined $first; print $first->get('Titel')."\n"; my $next=$elm; while( $next = $next->next() ){ if( ! $next->equal($elm) ) { print $next->get('Titel')."\n"; } }
QuoteEin Vorteil ist die Wiederverwendbarkeit. Ein einmal nach dem Interface geschriebener Code kann immer wieder an verschiedenen Stellen neu eingesetzt werden.
Dann die Reimplementierbarkeit. Der Code hinter einem Interface kann ausgetauscht werden, ohne die restliche Applikation verändern zu müssen.
Die Dokumentierbarkeit ist auch ein Vorteil. Eine Definiere Schnittstelle erklärt auch die Funktion eines Codeabschnitts.
Dagegen spricht das Interfacecode komplexer sein muss als nötig um seine Aufgabe zu erfüllen. So müssen übergebene Parameter geprüft werden, oder Funktionen für Eventualitäten bereit gestellt werden, die dort wo der Code eingesetzt wird niemals auftauchen werden.
Schnittstellen beschränken die Handlungsfreiheit des Programmierers und können dadurch zu schlechterem Code führen.
QuoteDu hast das schon mal programmiert und benutzt. Was hat dich daran gestört? Was fandest du Praktisch? Wo hast du dir gesagt "Zu dumm das ich das so programmieren muss." "Ob das auch eleganter geht?" "Ob das auch übersichtlicher geht?"
QuoteCode (perl): (dl )1 2 3@temp = db->get_next_row(); $temp[1] = "George Orwell"; db->set_row(@temp);
QuoteWenn ich das allein Betrachte kommen ein paar Fragen auf...
Quote...Warum werden alle Daten gelesen und wieder Zurück kopiert? Gibt es keine Funktion die Werte "Am Ort" verändert?...
QuoteWas mache ich wenn ich eine DB in eine andere kopieren will, oder eine mit mehreren anderen Ergänzen will? Muss ich erst alle lesen und dann in die Finale schreiben? Ein Paket (Klasse) zu benutzen macht die Verwendung bei einer Db einfacher, aber sobald es mehrere werden wird es kompliziert.
1 2 3 4 5 6 7 8 9
tie(my @db, 'My::DB',$file); ... for my $temp (@db) { print "$temp->[1]\n"; } ... $db[100][1]="George Orwell";
QuoteIst zwar viel hin und her kopiererei, aber ich erspare mir damit die Überprüfung ob an den Textfeldern im Frontend was verändert wurde und könnte sehr leicht einen Schreibschutz implementieren.