Thread Frage zu Handling von Config - Einträge (2 answers)
Opened by YAPD at 2019-06-06 19:59

YAPD
 2019-06-06 19:59
#190096 #190096
User since
2015-09-20
146 Artikel
BenutzerIn

user image
Hallo Zusammen,

nach einem regen Austausch mit HAJ ( danke nochmal ), der mir riet,
meine alte Idee zu verwerfen und mit CPAN:Moose zu arbeiten,
habe ich mir das Modul nun genauer angesehen. Natürlich habe ich noch
einiges zu lernen aber ich habe bereits eine Verständnisfrage, bei der
ihr mir vielleicht weiterhelfen könnt. :)

Ich habe zur Zeit 3 Files :

1. Installer.pl -> Grunddatei zum Starten der Anwendung

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
   use Moose;
use Kernel::Config;

# ------------------------------------------------------------------------

my %Config = Kernel::Config -> Config_Loader( );

print "Value des Config - Objekts : $Config{ 'DB_Handle' }";

# -------------------------------------------------------------------------
1;


Hier lädt er das Config - Modul & stellt die Ergebnisse als Hash zur Verfügung,
auf die ich mit
Code: (dl )
$Config{ 'Werte des Hashs aus der Config' }
zugreifen kann.

___________________________________________________________________________________________

2. Die Config.pm

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   package Kernel::Config;

use Moose;

extends 'Kernel::Config::Defaults';

# ------------------------------------------------------------------------

sub Config_Loader {

my %Config_Werte = ( Home => 'C:\Scripts\Aktuell' );

my $Defaults_Handler = Kernel::Config::Defaults -> new( ) ;
my $Defaults_Referenz = $Defaults_Handler -> Load_Defaults( ) ;

my %Defaults_Werte = %$Defaults_Referenz;

# print "@{[ %Defaults_Werte ]}";

return( %Defaults_Werte );
}

# --------------------------------------------------------------------------------

no Moose;

# ---------------------------------------------------------------------------------

__PACKAGE__ -> meta -> make_immutable;


Die Variable "Home" im Hash "%Config_Werte" ist äußerst wichtig, da sie
den Basispfad für die ganze Anwendung angibt, sie muss anpassbar sein
und wird überall verwendet, bzw. soll verwendet werden.

Dies ist auch der einzige Wert, der wirklich in der Config.pm steht, alle
anderen Config - Einträge stehen in der Datei "Defaults.pm", die ich mit
Code: (dl )
my $Defaults_Handler  = Kernel::Config::Defaults -> new( ) ;

initialisiere.

Dann lade ich alle Config - Einträge mit :
Code: (dl )
$Defaults_Referenz = $Defaults_Handler -> Load_Defaults( );


Ich dereferenziere noch den Hash und gebe die Ergebnise als Hash zurück :
Code: (dl )
1
2
3
   my %Defaults_Werte = %$Defaults_Referenz;
return( %Defaults_Werte );


___________________________________________________________________________________________

3. Die Defaults.pm

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   package Kernel::Config::Defaults;

use Moose;

# --------------------------------------------------------------------------------------------------------------------------------------------------------

sub Load_Defaults {

my %DB_Connection = ( DB_Handle => 'Microsoft SQL Server' );

if ( -e "C:/Scripts/Aktuell/Kernel/Config/Files" )
{
print "Positive Erkennung des Config - Files Ordners ..." , "\n";
}

return { %{ \%DB_Connection } }

};

# --------------------------------------------------------------------------------------------------------------------------------------------------------

no Moose;

# --------------------------------------------------------------------------------------------------------------------------------------------------------

__PACKAGE__ -> meta -> make_immutable;


1;


Hier komme alle Config - Einträge rein, ungefähr 200 oder mehr, die ich wie
beschrieben aufrufen kann.

___________________________________________________________________________________________


DAS PROBLEM

Ich hatte vorher eine Config - Datei, in der die Config - Einträge in folgendem Format standen :

Code: (dl )
1
2
3
$Self -> { Database }     = 'Bezeichnung der DB';
$Self -> { DatabaseUser } = 'Standard User';
$Self -> { DatabasePw } = 'XXXXXXXX';


anstatt akuell als Hash :

Code: (dl )
my %DB_Connection = ( DB_Handle => 'Microsoft SQL Server' );


Und bei Prüfung des Verzeichnis für das Verzeichnis "C:/Scripts/Aktuell/Kernel/Config/Files" wurde anstatt
Code: (dl )
 -e "C:/Scripts/Aktuell/Kernel/Config/Files/"
folgender Code verwendet :

Code: (dl )
 -e "$Self->{Home}/Kernel/Config/Files/"


Dies war so weil in der alten Config.pm die Variable "$Self->{Home}" auch so definiert war, anstatt aktuell als Hash.


DIE FRAGE

Ich möchte nun, dass :

1. ihr mir grundsätzlich sagt, ob es sinnvoll ist, es wieder auf diese Art zu handlen, oder ob ich es bei
Hashes belassen soll wie es ist. Wenn ich wieder das Format "$Self->{Home}" verwendet soll, kriege ich
das nicht bewerkstelligt mit Self und dem Hash. :/

2. das Script wenn die Prüfung erfolgreich ist, also das o. g. Verzeichnis existiert, alle .PM Dateien in
dem Ordner wiederum reinlädt und die Variablen übergibt ( entweder auch Hashes oder "$Self -> < Parameter >"

Ich verwende das so, weil ich es nicht so schreiben konnte ( aufgrund Unwissen wahrscheinlich ), dass Moose
in einem "has" Befehl z. B. 20 Variablen enthält. Ich würde es auch ungern als Sub - Routine oder ähnliches
machen. Oder könnt ihr mir sagen, wie ich das bewerkstellige, eine Config - Datei mit sehr vielen Parametern
als Moose has Objekt ???

Ich hoffe ihr könnt mir helfen und erwarte sehnsüchtig Eure Antwort. :) XD

Viele Grüße
YAPD
Last edited: 2019-06-06 20:18:02 +0200 (CEST)
Yet Another Perl Developer

View full thread Frage zu Handling von Config - Einträge