[PHP/OOP] Klassenaufbau

Johnson

Code-Frevler
ID: 118054
L
20 April 2006
859
53
Hi,

ich habe hier ein kleines Problem mit dem Klassenaufbau, das etwas doof zu beschreiben ist. Wie auch immer, ich versuch´s mal ;)

Problembeschreibung
Es soll folgende Klassen geben, die Namen geben Aufschluss auf die jeweilige Funktionalität:
Code:
page // Standard page
 -- templatePage extends page
 -- libPage extends page // Stellt noch einige Libs bereit
   -- templateLibPage extends libPage

Nun habe ich das Problem, dass ich z.B. den Teil für das template in den Klassen "templatePage" und "templateLibPage" habe. Daher hab ich das Gefühl, dass irgendwo ein Fehler in diesem Ansatz ist, da ich ja dann Datenredundanz habe und einer der OOP-Vorteile (Wiederverwertbarkeit) fast weg ist.

Lösungsansätze
In den Sinn gekommen sind mir vorallem:
:arrow: Nachladen der template-Funktionalität
:arrow: Erzeugen einer dynamischen Klasse (gerade hierfür sollte es doch ein schönes Pattern geben? Mir ist da nichts bekannt.)

Aber irgendwie erscheint mir das alles etwas umständlich ... Kennt ihr da eventuell einen schöneren Ansatz?

Gruß
 
Nun habe ich das Problem, dass ich z.B. den Teil für das template in den Klassen "templatePage" und "templateLibPage" habe. Daher hab ich das Gefühl, dass irgendwo ein Fehler in diesem Ansatz ist, da ich ja dann Datenredundanz habe und einer der OOP-Vorteile (Wiederverwertbarkeit) fast weg ist.
nunja.. der sinn von vererbung ist nunmal die funktionen der übergeordneten klasse in der abgeleiteten zu haben. insofern ist das mehr als nur korrekt. es ist aber nicht unbedingt sinn von oop alles mit vererbung zu lösen. es gibt auch noch factorys, singelton, normale klassen, unnormale klassen, usw :)
insofern verstehe *ich* hier deine frage/bedenken nicht.


Lösungsansätze
In den Sinn gekommen sind mir vorallem:
:arrow: Nachladen der template-Funktionalität
brauchst du dafür unbedingt vererbung? vererbung fordert neue klassen und damit neue objekte und damit keine bestehende klasse bei der etwas nachgeladen/erweitert wird. ausser sie würde das nachgeladene objekt durch aufruf zurück geben und man könnte dort dann die neuen funktionen nutzen.

:arrow: Erzeugen einer dynamischen Klasse (gerade hierfür sollte es doch ein schönes Pattern geben? Mir ist da nichts bekannt.)
was genau verstehst du unter dynamischen klassen? kann es sein, dass du nach aufrufen per reflection suchst?

oop ist nen bissel mehr als nur nen pattern. es hilft dir bestimmt in diesem bereich nen buch zu lesen. einzelne internetseiten werden dir da nur teilweise die antworten auf deine fragen geben können.
 
nunja.. der sinn von vererbung ist nunmal die funktionen der übergeordneten klasse in der abgeleiteten zu haben. insofern ist das mehr als nur korrekt. es ist aber nicht unbedingt sinn von oop alles mit vererbung zu lösen. es gibt auch noch factorys, singelton, normale klassen, unnormale klassen, usw :)
insofern verstehe *ich* hier deine frage/bedenken nicht.

Ich bin mir nicht sicher, wie ich das in diesem Fall jetzt lösen soll, wenn nicht über Vererbung, daher meine Frage :)

was genau verstehst du unter dynamischen klassen? kann es sein, dass du nach aufrufen per reflection suchst?

Unter dynamischen Klassen verstehe ich Klassen, deren Verhalten etc. sich zur Laufzeit ändern lässt (was ja aber wohl nicht direkt geht, sondern nur über einige Umwege).

oop ist nen bissel mehr als nur nen pattern. es hilft dir bestimmt in diesem bereich nen buch zu lesen. einzelne internetseiten werden dir da nur teilweise die antworten auf deine fragen geben können.

Die Prinzipien der OOP sind mir soweit für PHP nötig denke ich klar - ich frage mich wie gesagt nur, wie man das hier am elegantesten lösen sollte.

---

Mittlerweile habe ich das ganze über Extensions gelöst, die ich mir bei Bedarf nachladen kann und die mir dann über eine Schnittstelle in der page-Klasse zur Verfügung stehen.
 
"sowas wie" dynamisch erweiterbar kann man mit facotrys und reflection durchaus erreichen. von daher wäre das eine alternative, in der form macht das glaub auch smarty.

wenn du oop nen bissel mit factorys an der stelle ausreizen willst. dann nutze nen interface / abstracte klasse von der alle anderen abgeleitet werden. diese stellt eine standard-methode bereit die daten entgegen nimmt, verarbeitet und zurück gibt. die factory sorgt "im inneren" für die weiterleitung zur wirklichen klasse.

*so als denkansatz ;)