NAME
Quiq::ClassConfig - Verwalte Information auf Klassenebene
SYNOPSIS
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
DESCRIPTION
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.
METHODS
Information definieren
def() - Definiere/Setze Klassen-Information
Synopsis
$h = $class->def(@keyVal);
Arguments
Returns
Referenz auf den Hash
Description
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.
Information abfragen
defGet() - Liefere Klassen-Information
Synopsis
$val = $class->defGet($key);
@vals = $class->defGet(@keys);
Arguments
Returns
Description
Liefere die Werte zu den Schlüsseln @keys. Im Skalarkontext liefere den Wert des ersten Schlüssels.
defMemoize() - Berechne und chache Klassen-Information
Synopsis
$val = $class->defMemoize($key,$sub);
Arguments
- $key
-
Schlüssel
- $sub
-
Subroutine, die den Wert berechnet. Diese hat den Aufbau
sub { my ($class,$key) = @_; ... return $val; }
Returns
Description
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.
Information suchen
defSearch() - Suche Klassen-Information in Vererbungshierarchie
Synopsis
$val = $class->defSearch($key);
Arguments
Returns
Die gesuchte Information oder undef
.
Description
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.
defCumulate() - Sammele Klassen-Information entlang Vererbungshierarchie
Synopsis
@arr | $arr = $class->defCumulate($key);
Arguments
Returns
Liste der Werte. Im Skalarkontext eine Referenz auf die Liste.
Description
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.
Example
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')
VERSION
1.206
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2022 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.