[Allegro] Acon oder Avanti?

Michael Lackhoff michael at lackhoff.de
Do Aug 4 09:55:40 CEST 2011


Liebe Frau Koczian,

> Ich habe immer mal etwas kompliziertere Aktionen mit einer 
> Allegro-Datenbank, die ich nicht in einem Flex abwickeln kann oder will, 
> die sich aber ganz gut in einer Kombination von Acon-Jobs mit 
> zusätzlicher Verarbeitung in Python oder auch mal C# erledigen lassen.
> 
> Das spielt sich normalerweise auf genau dem Rechner ab, auf dem Allegro 
> samt Avanti, Acon und der Datenbank installiert ist, und weil ich ja 
> einen A30-Benutzer außer mir selbst habe, läuft Avanti sowieso.
> 
> Da bin ich immer unschlüssig, ob ich einen Avanti-Client schreiben soll 
> (etwas einfacher zu programmieren) oder lieber Acon ein paarmal aufrufen 
> (eine Zwischenschicht eingespart). Kann mir jemand mehr Argumente für 
> das eine oder andere liefern?

Ich wuerde andersherum fragen, d.h. nicht von Avanti/Acon her sondern
vom Python/C# her. D.h. ich wuerde mir in der zustaendigen
Python/C#-Klasse Methoden bauen, die die konkrete Zugriffsmethode
kapseln. Ich habe in meiner Perl-Datenbank-Klasse z.B. eine Methode
get_record. Da ist im Moment noch hartcodiert ein Acon-Zugriff drin. Bei
Bedarf liesse sich das natuerlich jederzeit aendern und es waere dafuer
gesorgt, dass die Aenderung nur an einer Stelle stattfindet.

Wenn ich noch mehr Flexibilitaet brauche, mache ich mir eigene "reader-"
(und "writer-") Klassen. Z.B. je eine fuer Acon, Avanti, direkten
Dateizugriff und von mir aus noch eine fuer Z39.50.
Das koennte dann z.B. so aussehen:
my $db = Allegro::Database->new(reader => 'Acon');
oder:
my $reader = Allegro::Reader::Avanti->new(
  host => '127.0.0.1',
  port => '4711'
);
my $db = Allegro::Database->new(reader => $reader);

Egal wie, ich wuerde solche Sachen immer sehr gut kapseln, so dass der
eigentliche Nutzcode nichts von den "dirty details" weiss.
So arbeitet z.B. mein Nachbau der Exportsprache auf beliebigen Strings:
$arbeitstext = process_mbs('Eine Serie ; 99', 'e";" F" "');
(aber natuerlich wird das dann auch im Record-Objekt verwendet:)
foreach my $isbn ($record->values('87.', '"_-__" e" "') {
  # ...
}
Kurz: gerade wenn Sie mit objektorientierten Sprachen wie Python oder C#
arbeiten, wuerde ich immer in Bausteinen(=Objekten) denken, die sich
dann je nach Bedarf zusammenstecken oder auch erweitern lassen, ohne den
uebrigen Code zu tangieren.

War nicht genau eine Antwort auf Ihre Frage aber hat vielleicht doch
eine Anregung gegeben -- sicher etwas gefaerbt von der Baustelle, an der
ich selbst gerade arbeite ;-)

Viele Gruesse
Michael Lackhoff





Mehr Informationen über die Mailingliste Allegro