[Dresden-pm] Frage zur Implementation von einer Schnittstelle

Steffen Schwigon ss5 at renormalist.net
Fr Okt 28 04:17:50 PDT 2011


Hi!

Ich glaube nicht, dass Du dieses Problem mit Technologie lösen kannst,
aber hier trotzdem ein paar Ideen:

1. Nutze ein CPAN-Modul, die Plugins ermöglichen:

   http://search.cpan.org/~muir/Plugins-0.41/

2. Hack selbst Dir was mit Modulen (die Plugins) und Funktionen darin
   zusammen, sinngemäß sowas:

     package MyProj::UserManagement::Plugin::KirmseStyle;
     sub get_display_name {
       my ($vorname, $nachname) = @_;
       return “$vorname $nachname”;
     }
     1;

   Das Interface ist hierbei der Namespace und die sub inklusive ihrer
   Parameter. Jemand anderes schreibt sein Plugin …::SchwigonStyle, etc.

   Dann rein-eval'n und aufrufen.

     my $plugin = get_from_config() || "KirmseStyle"; # config or default
     my $plugin_class = "MyProj::UserManagement::Plugin::$plugin";
     eval "use $plugin_class";
     my $display_name = &{"${plugin_class}::get_display_name"}($vorname, $nachname);

Ich empfehle das nicht wirklich, mache es aber selber auch so.
Es ist zumindest eine technische Variante mit eval.

Kind regards,
Steffen 

Hans-Dietrich Kirmse <hd.kirmse at gmx.de> writes:
> Hallo,
>
> ich komme wieder mit einer sicherlich exotischen Frage:
> wie gestaltet man eine Schnittstelle für eine "externe" Funktion.
>
> Ich meine damit Folgendes: ich habe für unser Schulserverprojekt eine
> ganze Reihe von Perl-Scripten zur User- und Rechnerverwaltung
> erstellt. Diese Scripte habe ich dann in ein Debian-Paket gesteckt und
> die werden darüber eingespielt.
>
> Nun ist es aber so, das diese Scripte nicht die Anforderungen von
> allen potentiellen Nutzern erfüllen werden. Es soll jetzt die
> Möglichkeit eingerichtet werden, dass andere Entwickler Scripte
> (Funktionen) schreiben, die sich in die von mir bereitgestellten
> Funktionen einklinken.
>
> Ein einfaches Beispiel: Beim Versetzen von Usern bzw. Klassen wird
> durch mein Script folgendes Codefragment aufgerufen:
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> # wir bilden den kompletten Name
> $name_curr = $forename_curr . ' ' . $lastname_curr;
>
> # und tragen den in den LDAP ein
> $mesg = $ldap->modify( $entry->dn,
>                        replace => { cn           => $name_curr,
>                                     sn           => $lastname_curr,
>                                     givenName    => $forename_curr,
>                                     displayName  => $name_curr } );
> $mesg->code and die "Abbruch: $mesg->error";
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Es wurden Wünsche geäußert, dass der displayname anders gebildert
> werden sollte, nämlich neben dem Name auch die Klasse angegeben
> werden. Andere lehnen das grundsätzlich ab, weil die Klasse ein
> eigener Entry im LDAP ist und es damit zu nicht gewollten Redundanzen
> kommt.
>
> Lösung des Problems, das für die, die das Attribut 'displayName'
> anders haben wollen, ein Funktion bereitzustellen, die eben für diesen
> User die Klasse im LDAP sucht und dann einen anderen Displaynamen
> bereitstellt.
>
> Das Problem ist nicht, wie so eine Funktion aussieht - das ist eher
> trivial. Das Problem ist, wie mache ich das, dass ein anderer
> Programmierer eine solche Funktion erstellen kann, diese in ein Modul
> steckt, dieses Modul in ein Debian-Paket steckt und wenn dieses
> Debian-Paket eingespielt wird, dass dann automatisch diese Funktion
> aufgerufen wird.
>
> Diese Sache hier mit dem Displayname ist dabei nur ein Beispiel. Es
> geht überhaupt darum, wie man so eine Schnittstelle implementiert. Ich
> habe dazu in der Literatur und im Netz (aber nur deutschsprachig)
> nicht gefunden. :(
>
> Ich hoffe, ich konnte mein Problem verständlich genug ausdrücken.
>
> Für jeden Hinweis, Idee wäre ich sehr dankbar.
>
> Viele Grüße
> Hans-Dietrich
> _______________________________________________
> Dresden-pm mailing list
> Dresden-pm at pm.org
> http://mail.pm.org/mailman/listinfo/dresden-pm
>

-- 
Steffen Schwigon <ss5 at renormalist.net>


Mehr Informationen über die Mailingliste Dresden-pm