hotti: Wartbarer Code und Teamarbeit

Beitrag lesen

Mahlzeit,

Die tun mir eigentlich leid, weil sie seit ungefähr 10 Jahren das, was in Perl schon immer gut geregelt ist, ständig neu erfinden müssen ;)

Da Perl ca. 10 Jahre älter ist als PHP ist das doch ne normale Sache, oder?

Ja, Freilich. Kannst mir glauben, auch von PHP hab ich mir Einiges abgeguckt :)

Es gibt auch immer wieder Stimmen, die behaupten, dass Perl-OOP gar nicht richtig OOP ist. In der Praxis jedoch, ist das absolut nebensächlich, die Mehrzahl der Objekte (die ich in die Welt hecke) sind reine Datenobjekte, also keine Instanzen irgendeiner Klasse. Und die Methoden, welche diese Daten bewegen, können genausogut ganz ordinäre Funktionen sein. Aber Eines ist sicher: Perl-OOP ist zum Organisieren/Strukturieren von Code hervorragend geeignet.

So kommen wir nun auch zum Thema Namespace, eine zum sauberen Strukturieren von Code außerordentlich wichtige Angelegenheit.

Traits: Ja, mache ich auch in Perl. Die werden bei mir dynamisch an Klassen gebunden, Beispiel:

In eine Seite sollen die Wetterdaten, die Seite wird von class A ausgeliefert. Der Designer baut ein paar Platzhalter ins Template und sagt mir wie die heißen. Ich verpasse dem URL zur Seite ein Attribut trailer=wetter und programmiere den Trait wetter.pm welcher die Platzhalter zum Leben erweckt.

Nun soll das Wetter auch in eine andere Seite, deren URL jedoch ist an class B gebunden. Kein Problem, neues Attribut für den an die Seite zugewiesenen URL setzen: trailer=wetter (wetter.pm hahmer schon), die Platzhalter in die Seite, fertig. Kein Griff in Code class A oder class B. Nur noch konfigurieren und ggf. einen minimalen Code erstellen. Ohne vogelwilde Klassenhierarchien und ohne groß suchen zu müssen, in welchem Verzeichnis die Traits liegen: @INC/Trailer.

MfG

PS: Zur im Threadeingang gezeigten Struktur passt das Pattern Entity Attribute Value (EAV). INI-Dateien bilden dieses Pattern ab. Alle meiner Sub-Klassen erben eine Methode: $self->eav('title', 'Neuer Titel für die Seite');

Method eav() als Getter oder Setter für ein reines Datenobjekt.

Seiten haben Attribute. OOP in der Praxis und nicht als Lehre von Äpfeln, Birnen und Hummeln :)