Quiq::ClassConfig - Verwalte Information auf Klassenebene
Klasse einbinden:
use base qw/... Quiq::ClassConfig/;
Information definieren (Anwendungsbeispiel):
package Model::Object; __PACKAGE__->def( table => 'Object', prefix => 'Obj', columns => [ id => { domain => 'Integer', primaryKey => 1, notNull => 1, description => 'Primärschlüssel', }, ... ], ... );
Information abfragen:
my $table = Model::Object->defGet('table'); => Object
Information suchen:
my $table = Model::Object->defSearch('table'); => Object
Die Klasse ermöglicht, Information in Klassen zu hinterlegen und abzufragen. Anstatt hierfür Klassenvariablen mit our zu definieren, verwaltet die Klasse sämliche Information in einem einzigen Hash (je Klasse natürlich) mit dem Namen %ClassConfig. Die Methoden der Klasse verwalten (erzeugen, setzen, lesen) diesen Hash.
our
%ClassConfig
$h = $class->def(@keyVal);
Liste der Schlüssel/Wert-Paare
Referenz auf den Hash
Erzeuge einen globalen Hash in Klasse $class und weise diesem die Schlüssel/Wert-Paare @keyVal zu. Existiert der Hash bereits, wird er nicht neu erzeugt.
$val = $class->defGet($key); @vals = $class->defGet(@keys);
Schlüssel bzw. Liste von Schlüsseln.
Wert bzw. Liste von Werten.
Liefere die Werte zu den Schlüsseln @keys. Im Skalarkontext liefere den Wert des ersten Schlüssels.
$val = $class->defMemoize($key,$sub);
Schlüssel
Subroutine, die den Wert berechnet. Diese hat den Aufbau
sub { my ($class,$key) = @_; ... return $val; }
Berechneter bzw. gecachter Wert
Berechne den Wert per Subroutine $sub, speichere ihn unter dem Schlüssel $key und liefere ihn schließlich zurück. Der Wert wird nur beim ersten Aufruf berechnet, danach wird der gespeicherte Wert unmittelbar geliefert.
$val = $class->defSearch($key);
Schlüssel der Information.
Die gesuchte Information oder undef.
undef
Suche "von unten nach oben" in der Vererbungshierarchie, beginnend mit Klasse $class, die Information $key. Die erste Klasse, die die Information besitzt, liefert den Wert. Existiert die Information nicht, wird undef geliefert.
@arr | $arr = $class->defCumulate($key);
Liste der Werte. Im Skalarkontext eine Referenz auf die Liste.
Durchlaufe die Klassenhierarchie von oben nach unten und sammele alle Werte des Attributs $key ein und liefere die Liste der Werte zurück.
Diese Methode ist nützlich, wenn z.B. Attributnamen entlang einer Vererbungshierarchie definiert werden (je höher die Klasse desto allgemeiner das Attribut) und für eine gegebene Klasse die Liste der Attributnamen bestimmt werden soll.
Klassenhierarchie:
package Object; use base/Quiq::ClassConfig/; __PACKAGE__->def( Attributes => [qw/ Id /], ); package Person; use base qw/Object/; __PACKAGE__->def( Attributes => [qw/ Vorname Nachname /], );
Attributes der Klasse Person:
@attributes = Person->defCumulate('Attributes'); => ('Id', 'Vorname', 'Nachname')
1.145
Frank Seitz, http://fseitz.de/
Copyright (C) 2019 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.