Olaf Schneider: Klassen überlagern

Beitrag lesen

Hallo,

ich bin gerade dabei, mir Konzepte für das Anpassen von Internetapplikationen (Sprache ist php5) zu überlegen. Die Idee ist folgende: Ich habe ein Kernsystem, welches keine kundenspezifischen Anpassungen enthalten soll. Allerdings soll jede Klasse durch eine andere (in einem anderen Ordner) ersetzt werden können, damit individuelle Anpassungen dennoch möglich sind.

Schritt eins wäre einfach: Ich schaue für jede Klasse erst in den individuellen Ornder und prüfe, ob eine Datei mit dieser Klasse exisitiert. Falls es diese Datei gibt, wird die individuelle Klasse verwendet, falls nicht, benutze ich die nicht veränderbare Klasse aus dem Kernsystem. Die Klassennamen wären dabei identisch.

Dieser Teil lässt sich mit der __autoload()-Funktion hervorragend implementieren.

So schön, so gut. In den meisten Fällen wird man jedoch nicht eine Klasse komplett ersetzen wollen, sondern ledigich ein, zwei Methoden anpassen. Also müsste die individuelle Klasse die Klasse aus dem Kernsystem mit extends erweitern. Jetzt gibt es allerdings ein Problem mit der Namensgleichheit. Die individuelle Klasse heisst bis jetzt ja genauso wie die Basisklasse. Hm …

Zwei Möglichkeiten möchte ich zur Diskussion stellen mit der Hoffnung auf weitere, bessere Möglichkeiten:

(1)

Jedes Objekt wird mit einer allgemeinen Factory erzeugt. Diese verwendet die Klasse {ClassName}_Individuell, falls diese existiert und sonst die Klasse {ClassName}

Nachteil:

Der new-Mechanismus ist nicht mehr gestattet, der gesamte Code muss auf die Verwendung dieser Fabrik umgeschrieben werden.

(2)

Jede ursprüngliche Klasse teilt sich in zwei neue Klassen:

{ClassName}_Core ist eine abstrakte Klasse, die die gesamte Funktionalität beinhaltet. {ClassName} erweitert {ClassName}_Core und ist die konkrete Klasse, auf die zugegriffen werden kann.
Jetzt kann eine individuelle Klasse von {ClassName}_Core erben und den gleichen Klassennamen {ClassName} besitzen, da ja nur genau eines der beiden Klassenfiles inkludiert wird.

Nachteil:

Jede Klasse braucht eine Abstrakte Klasse und eine leere konkrete Klasse; die Anzahl der Klassen verdoppelt sich somit.

Welche Methode fändet Ihr besser: (1), (2) oder Eure, die ich noch nicht kenne?

Gruß
Olaf