php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.09.2011, 09:56  
Neuer Benutzer
 
Registriert seit: 30.03.2009
Beiträge: 18
Schneidi befindet sich auf einem aufstrebenden Ast
Standard Pluginfähigkeit von Webanwendungen

Hi, ich weiß dass Plugins schon häufiger besprochen wurden, aber ich hab noch keinen für mich interessanten Treffer gefunden.

Deswegen wollte ich euch mal zu meinem Fall befragen.

Wir entwickeln Webanwendungen die für mehrere verschiedene Kunden zur Verfügung gestellt werden sollen. Jetzt ist natürlich klar, dass jeder Kunde irgendwo mit spezifischen Wünschen kommt und sich die Anwendung an eben
diesen Wünschen orientieren muss.

Wir hatten an dieser Stelle über eine Plugin Schnittstelle nachgedacht. Für die wir aber noch keinen richtigen Ansatz gefunden haben.

Vorstellen könnt ihr euch das so, dass die Oberfläche der Anwendung je nach Kundenwunsch spezielle Erweiterungen aufweisen muss.

Beispiel: eine Liste in der Kunde X zusätzlich zum Standard eine weitere Information angezeigt bekommen möchte.

Na ich denke ihr könnt euch vorstellen was gemeint ist. Ich bräuchte hier einen Mechanismus, der ohne Änderungen am Standard mir die Möglichkeit bietet mich in den Standard einzuklinken und Ergänzungen vorzunehmen.

Das Problem, was ich momentan habe, ist, das ich nicht weiß wie ich mich zu einem späteren Zeitpunkt in die Erzeugung der Website einklinken kann.

Ich müsste ja zusätzlich zu der Standard-Liste eine Ergänzung vornehmen.
Was mir in php wohl so nicht möglich ist. Wie kann ich das nun angehen ?

Ich kenne entsprechende Ansätze aus anderen Entwicklungsumgebungen, die aber umfangreiche Frameworks für das erzeugen Grafischer Oberflächen anbieten.

Könnte man sich hier via jQuery einklingen und nachträglich Ergänzungen vornehmen ? Technisch halte ich das für möglich, aber ist das empfehlenswert ?

Wir würdet ihr versuchen solche Fälle abzudecken ?

Gruß
Jan
Schneidi ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.09.2011, 10:27  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Kommt drauf an... geht es wirklich nur um die Oberfläche, so dass die unterschiedlichen Anforderungen mit jeweils individuellem JavaScript abgedeckt werden können?

Was meinst du mit "späterer Zeitpunkt" und "Standard-Liste"?

Geht es darum, dass die Anwendungen auf einem gemeinsamen Server laufen und auf die selbe Code-Basis zugreifen? Dann würde ich erstmal zwischen Core, Anwendung und Plugins trennen, etwa so:

Code:
- core (dein "Standard")
- plugins (alle möglichen Zusatzfunktionen zentral)
 - zusatzfunktion1
 - zusatzfunktion2

- app1 (eine Anwendung)
 - core (symlink)
 - plugins
  - zusatzfunktion1 (symlink)
 - app (anwendungsspezifischer Code, Bootstrap)
Für die Entwicklung der Plugins in PHP bietet sich beispielsweise das Observer-Pattern an.
fab ist offline   Mit Zitat antworten
Alt 06.09.2011, 10:30  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Ein Event-System wäre in meinen Augen ein praktikabler Ansatz,
xm22 ist offline   Mit Zitat antworten
Alt 06.09.2011, 11:56  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.168
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

Was hat das denn mit Event zu tun ?

Ein zusätzlich anzuzeigendes Feld entspricht einem Event ??

Zitat:
wie ich mich zu einem späteren Zeitpunkt in die Erzeugung der Website einklinken kann.
Du trennst doch hoffentlich Verarbeitung und Ausgabe (EVA-Prinzip).
Also klinkst Du Dich vor jeglicher Ausgabe ein und änderst den Inhalt der Ausgabe entsprechend
den Kundenanforderungen.

prozedural:
PHP-Code:
foreach (glob("plugins/*.php") as $plugin) {

     include 
plugin;

OOP-Frameworks bieten andere Ansätze.

Aber wir wissen eben nicht wie Deine Website aufgebaut ist.
__________________
Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.
Koala ist offline   Mit Zitat antworten
Alt 06.09.2011, 12:44  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Ein zusätzlich anzuzeigendes Feld entspricht einem Event ??
Natürlich nicht. Wie kommst Du darauf? Man könnte ein Plugin für ein Event registrieren, das beim Anzeigen der oben genannten Informationen aufgerufen wird. Als Parameter könnte z. B. dann die bisherige, auszugebenden Information übergeben werden, die dann von dem Plugin erweitert wird.

Zitat:
Also klinkst Du Dich vor jeglicher Ausgabe ein und änderst den Inhalt der Ausgabe entsprechend
den Kundenanforderungen.
Hier machst Du es doch ähnlich.
xm22 ist offline   Mit Zitat antworten
Alt 06.09.2011, 13:12  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Eventsystem (Hooks, Callback) ist schon richtig. Fraglich ist halt, wie granular man das anlegt. Wenn das bis auf Ebene der Formulare oder Listen runtergeht, würde ja bspw. bei jeder Zeile eine Nachricht erzeugt.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 06.09.2011, 14:14  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich würde das, so wie das klingt, auch eher mit überschriebenen Templates/Klassen arbeiten, da man vorher meist nie weiß, wie weit die Unterscheidungen gehen.
xm22 ist offline   Mit Zitat antworten
Alt 06.09.2011, 15:18  
Neuer Benutzer
 
Registriert seit: 30.03.2009
Beiträge: 18
Schneidi befindet sich auf einem aufstrebenden Ast
Standard

Is irgendwie schwer zu erklären. Die Web Appl. ist keine Website im dem Sinne, sondern schon eher wie ein Desktop Programm aufgebaut.

Der Core ist in dem Moment der Mindestfunktionsumfang der gewährleistet sein soll. Kundenspezifische Wünsche sollen jetzt als Ergänzung eingepflegt werden.

Der "spätere Zeitpunkt" ist quasi jeder nach Entwicklung des Cores. Ich will hier vermeiden immer wieder am Core rumbasteln zu müssen, wenn ein Zusatz benötigt wird. Wohin das führt kann man sich ja ausmalen.

Die "Standard Liste" stell dir ganz simpel als Tabelle vor. Kunde X möchte jetzt in dieser Tabelle eine spezifische Spalte angezeigt bekommen. Wie bekomme ich jetzt diese Spalte nachträglich in die Oberfläche ohne in der Basisversion also im Standard so n zeug wie if(plugin vorhanden) schreib hier was zusätzlich rein; zu hinterlegen.

Das spricht eben gegen solche Ansätze:
PHP-Code:
foreach (glob("plugins/*.php") as $plugin) {

     include 
plugin;

Stell dir vor Kunde Y will nur ne Überschrift oder dergleichen geändert haben.
Da würde ich aus wenn - dann abfragen nicht mehr rauskommen.

Zitat:
Ich würde das, so wie das klingt, auch eher mit überschriebenen Templates/Klassen arbeiten, da man vorher meist nie weiß, wie weit die Unterscheidungen gehen.
Könntest du den Ansatz noch etwas genauer erläutern ?
Schneidi ist offline   Mit Zitat antworten
Alt 06.09.2011, 15:41  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Zitat:
Zitat von Schneidi Beitrag anzeigen
Wie bekomme ich jetzt diese Spalte nachträglich in die Oberfläche ohne in der Basisversion also im Standard so n zeug wie if(plugin vorhanden) schreib hier was zusätzlich rein; zu hinterlegen.

Das spricht eben gegen solche Ansätze:
PHP-Code:
foreach (glob("plugins/*.php") as $plugin) {

     include 
plugin;

Ich sehe da keinen Widerspruch. Dass man zusätzliche Funktionalität mit Plugin bereitstellen kann ohne den Core zu ändern ist hier schon mehrmals gesagt worden: Observer, Events, Hooks - mit den Stichworten solltest du zumindest im Ansatz fündig werden. Prinzipiell heißt das, der Core meldet (an deinem Beispiel) "ich rendere jetzt mit folgenden Daten die Tabelle" und das Plugin, das diesem Event lauscht ändert selber diese Daten, fügt also die neue Spalte hinzu. Der Core arbeitet dann mit den veränderten Daten weiter ohne etwas vom Plugin wissen zu müssen.

Das geht am besten wenn du konsequent objektorientiert arbeitest, ist aber auch mit Callback-Funktionen und Referenzen umsetzbar.
fab ist offline   Mit Zitat antworten
Alt 06.09.2011, 15:55  
Neuer Benutzer
 
Registriert seit: 30.03.2009
Beiträge: 18
Schneidi befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
der Core meldet (an deinem Beispiel) "ich rendere jetzt mit folgenden Daten die Tabelle"
Genau das ist ja das Problem bei der Geschichte. Das bedingt, dass ich jeder Zeit bei egal welcher Aktion immer die verwendeten Daten an evtl. Plugins weiter reiche. Das würde aber darin eskalieren, dass mein Core voll von Abfragen nach möglichen Plugins wäre.

Es bleibt ja nicht bei, ich rendere jetzt die Tabelle... Was ist mit ich rendere jetzt die Überschrift 1, jetzt die Überschrift 2, jetzt Button 1 ... etc.

Da ich in der Core Entwicklung nicht weiß wo ich später evtl. Änderungen vornehmen muss.
PHP-Code:
foreach (glob("plugins/*.php") as $plugin) { 

     include 
plugin

Dieser Ansatz bedingt, dass ich genau weiß wo ich später die Funktionalität eines Plugin greifen lassen will.
Schneidi ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
php Programmierer (m/w) für Webanwendungen gesucht ADENION Gewerblich 0 18.07.2011 15:46
php Programmierer (m/w) für Webanwendungen gesucht ADENION Gewerblich 0 04.04.2011 15:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
webanwendung ohne plugin, plugin fähigkeit, plugins webanwendungen, javascript pluginfähig, symlink webanwendung, plugin-fähigkeit, webanwendungen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum