The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Prty::ClassConfig - Verwalte Information auf Klassenebene

SYNOPSIS

Klasse einbinden:

    use base qw/... Prty::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);

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.

Arguments

@keyVal

Liste der Schlüssel/Wert-Paare

Returns

Referenz auf den Hash

Information abfragen

defGet() - Liefere Klassen-Information

Synopsis

    $val = $class->defGet($key);
    @vals = $class->defGet(@keys);

Description

Liefere die Werte zu den Schlüsseln @keys. Im Skalarkontext liefere den Wert des ersten Schlüssels.

Arguments

$key bzw. @keys

Schlüssel bzw. Liste von Schlüsseln.

Returns

$val bzw. @vals

Wert bzw. Liste von Werten.

defMemoize() - Berechne und chache Klassen-Information

Synopsis

    $val = $class->defMemoize($key,$sub);

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.

Arguments

$key

Schlüssel

$sub

Subroutine, die den Wert berechnet. Diese hat den Aufbau

    sub {
        my ($class,$key) = @_;
        ...
        return $val;
    }

Returns

$val

Berechneter bzw. gecachter Wert

Information suchen

defSearch() - Suche Klassen-Information in Vererbungshierarchie

Synopsis

    $val = $class->defSearch($key);

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.

Arguments

$key

Schlüssel der Information.

Returns

Die gesuchte Information oder undef.

defCumulate() - Sammele Klassen-Information entlang Vererbungshierarchie

Synopsis

    @arr | $arr = $class->defCumulate($key);

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.

Arguments

$key

Schlüssel der Information.

Returns

Liste der Werte. Im Skalarkontext eine Referenz auf die Liste.

Example

Klassenhierarchie:

    package Object;
    use base/Prty::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.120

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2017 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.