Thread Perl OOP
(12 answers)
Opened by sid burn at 2006-09-21 19:24
Hi,
ich wollte etwas machen, eine ungefähre Lösung habe ich zwar schon. Allerdings weiß ich nicht ob dies die beste Lösung ist, oder ob es nicht bessere Möglichkeiten gibt. Hier einmal eine kurz beschrieben was ich machen wollte: Ich habe ein Benutzer der Unterschiedliche Attribute besitzt. "Username", "Password", "email", "duration", ... Zum setzen und Auslesen der Daten habe ich mich entschieden Setter und getter zusammen zu schreiben. Code: (dl
)
$user->user gibt mir also den benutzernamen aus Code: (dl
)
$user->user('anne') würde den benutzernamen setzen. Sowas ist ja eigentlich einfach und klappt soweit. Nun wollte ich das ganze aber erweitern. Ich möchte das bestimmte Methoden nur für bestimmte Attribute verfügbar sind z.B. wenn man die Duration um 1 Tag erhöhen möchte sollte man einfach ein zusätzlich add hinzufügen. Dieses "add" sollte es aber nur für dieses Attribut geben, andere Attribute sollten Ihre eigene "add" Methode Implementieren können. Jetzt möchte ich aber ungern ein "add_duration", "add_foo" etc. hinzufügen. Irgendwie dachte ich an eine ähnliche Funktionalität wie so etwas. Code: (dl
)
$user->duration->add(1) Das obere habe ich schon in etwa hinbekommen. Dabei gehe ich nun folgendermaßen vor das ich "user" "user::name", "user::password" etc. als Klasse besitze. Innerhalb der "user" Klasse baue ich ein Hash auf. Der Schlüssel ist der Attributname und der Value ist eine Objektreferenz auf "user::name", "user::password" etc. In meiner "user" Klasse habe ich dann z.B. eine Methode "password" erzeugt die mir Wiederrum aus dem hash das entsprechende "user::password" Object zurück gibt. Somit bin ich in der Lage "$user->password->get" zu schreiben und alles Funktioniert. Jetzt zu meinen Anmerkungen: 1) Leider bin ich jetzt nicht mehr in der Lage einfach nur "$user->password" und "$user->password('neues_password')" zu schreiben. Da ja die Methode password eine Objektreferenz zurück gibt. Gibt es irgendeine Möglichkeit das trotzdem zu Implementiere? Praktisch wäre wenn nichts weiteres kommt einfach die get Methode aufgerufen wird, und wenn doch ein Attribut angegeben wird, die set Methode aufgerufen wird. Allerdings kann man nicht innerhalb der Methode überprüfen ob die Methode wiederrum als Objekt aufgerufen wird? 2) Es sieht mir ziemlich unpraktisch aus. Man schreibt eigentlich für solch eine kleine Implemenatation ziemlich viel Code. Zum anderen enthalten "user::password" etc. immer nur ein einzigen Attributwert. Das schaut mir irgendwie nach Verschwendung von Klassen aus, wenn ich letztendlich aus jeden Attributwert nochmals eine Klasse mache. Gibt es da irgendwie eine einfachere, oder bessere Möglichkeiten solch eine Funktionalität zu Implementieren? Oder ein ganz anderen Weg dies zu machen? Mein bisheriger Code mit dem ich das ganze getestet habe schaut folgendermaßen aus: Code: (dl
)
1 #!/usr/bin/perl Ausgabe: \n\n <!--EDIT|sid burn|1158852730--> Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
|