Layoutprobleme? - Styleswitcher!
![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 745
| Hallo. Mich nervt gerade mein Entwurf und ich würde mich über Anregungen freuen: Prinzipiell hab ich eine hierarchische MVC-Architektur, es gibt also einen Baum an Modulen. - Nur die Controller können jeweils Kinder in diesem MVC-Baum bauen und einhängen. - Es gibt ein Modul Page mit einem Controller für die verschiendenen Aktionen (Seite anzeigen, bearbeiten, verschieben, löschen etc.). - Jede Seite besteht aus verschiedenen Komponenten. Ich würde gerne, um eine Seite (oder Seitenversion) zu löschen aus dem Seiten-Controller einfach ein $this->Page->remove() ausführen. Nun hat $this->Page (also das Daten-Objekt) zwar natürlich diese Methode, kann aber die Komponenten nicht selbst bauen, um ihnen ein remove() zu schicken bzw. den Baum des Controllers manipulieren. Habt ihr schonmal mit diesem Problem zu tun gehabt? Gibt es bewährte Lösungen? Basti |
| | |
| | Nach oben #2 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 353
| Kennt denn deine Page ihren Parent im Objektbaum? Wenn ja, dann kann sie die Arbeit an diesen delegieren, sowas wie: $this->parentController->remove($this);
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |
| | Nach oben #3 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 745
| Nein. Die Datenobjekte kennen ausschließlich ein jeweils übergeordnetes „Manager“-Objekt, dass alle Objekte diesen Typs verwaltet (ähnlich, wie die Peer-Objekte oder die statschen Methoden von DataObjects in einigen ORM-Paketen). Diese Manager kennen wiederum nur eine DaoFactory und einen Zugang, um an andere Manager dranzukommen. Aber sie kennen weder Controller noch Views. Basti Geändert von Basti (16.04.2008 um 18:06 Uhr). |
| | |
| | Nach oben #4 |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 112
| Hallo Basti, wenn ich deine Struktur richtig verstanden habe, hälst du irgendwo in deiner Applikation / oder deinem Applikationsrahmen eine Objekt-Struktur aus unterschiedlichen Seiten und Modulen als Daten-Objekte. In diesem Fall bietet sich zunächst die Struktur nach dem Composite-Pattern zu erzeugen, da du dann sicher sein kannst, dass die Objekte die entsprechenden Methoden für die grundlegende Manipulation unterstützen. Weiterhin bin ich der Meinung, dass ein Controller nicht in der von dir beschriebenen Form im Baum integriert sein soll, da deine Knoten streng genommen jeweils kleine MVC-Einheiten sind. Damit sollte ein Controller höchstens seinen Knoten - bzw. vive versa - ein Knoten nur seinen Controller kennen, der den Knoten manipulieren kann. Aus meiner Erfahrung ist es mit der beschriebenen Variante möglich, dass du deinen Baum im Controller manipulierst. Einen derartigen Eingriff in den Baum wie Löschen ist jedoch heikel, da in Baum-Strukturen dann ganze Zweige verschwinden könnten. Ist das von dir so gewollt, ok, aber dann würde sich der Controller den Ast weg sägen. Ich glaube, dass es für deine Problemstellung eine elegante Lösung geben kann, jedoch solltest du nochmal einen konkreten Anwendungsfall aufzeigen, dann wird es vielleicht klarer.
__________________ Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a look at http://www.adventure-php-framework.org! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | Nach oben #5 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 745
| http://www.javaworld.com/javaworld/j...vc.html?page=2 http://c2.com/cgi/wiki?HierarchicalModelViewController http://c2.com/cgi/wiki?RecursiveModelViewController Ich glaube, mein Problem ist gerade, dass ich fü ein Datenobjekt, wie z.B. „Page“ einmal einen „offiziellen“ Controller habe und zum anderen dieses Objekt selbst Methoden zur Manipulation kennt. Ist ja auch klar, nur hab ich gerade keine scharfe Trennlinie bzw. mein Baum existiert quasi doppelt: Einmal im Datenobjekt in Form von Daten eben (Seite x besteht aus den und den Komponenten) und einmal im Controller (Kinderknoten sind die Controller der Komponenten). Basti |
| | |
| | Nach oben #6 |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 112
| Hallo Basti, verstehe ... Eine harte Trennlinie wäre an dieser Stelle in der Tat ästhetischer. Hast du die Möglichkeit die Objekte in deinem Controller lediglich zu referenzieren? Falls ja, sparst du dir die doppelte Haltung der Objekte und die Verarbeitung wird einfacher. Sinnvollerweise sollte jede Schicht der HMVC-Implementierung auch einen eigenen Dispatcher haben, der die Verarbeitung regelt. Was die Verarbeitung von Controller und Manipulationsmethoden der Objekte selbst angeht, kannst du zwei Wege verfolgen: 1. Timing-Model des Dispatchers so modifizieren, dass bei der Verarbeitung eines Objekts in definierter Reihe Methoden zur Verarbeitung aufgerufen werden. Das kann so aussehen (Pseudocode Code: ... $Object->firstMethod(); $Object->onBeforeTransform(); $Controller = new Contoller(); $Controller->setCurrentNode(&$Object); $Controller->executeTransformMethod(); $Object->onAfterTransform(); ... Ich hoffe, ich konnte dir einen Denkanstoss geben.
__________________ Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a look at http://www.adventure-php-framework.org! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | Nach oben #7 | ||
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 745
| Zitat:
Zitat:
Code: page.remove:
page = pages.getByName(Request.pagename)
if isNull(page)
return badRequest
if not(user.hasRight(page, 'remove'))
return noRights
parent = page.getParentPage
page.remove()
return redirect(parent, message('pageRemoveSuccess')) Den ganzen Schlonz will ich natürlich nicht im Controller haben. Ich machs mal konkret. Ein Controller-Baum könnte z.B. so aussehen: Code: + "page" => PageController | +-+ "page_version" => PageVersionController | | | +-+ "panels" => ContainerController | | | +-+ "contents" => PanelController | | | | | +-+ "0" => SectionController | | | | | | | +-+ "0" => PageNodeController | | | | | | | +-- "component" => Component_Heading | | | | | +-+ "1" => SectionController | | | | | | | +-+ "0" => PageNodeController | | | | | | | +-- "component" => Component_MlText | | | | | | | +-+ "1" => PageNodeController | | | | | | | +-- "component" => Component_Image | | | | | | | +-+ "2" => PageNodeController | | | | | | | +-- "component" => Component_MlText | | | | | +-+ "2" => SectionController | | | | | +-+ "0" => PageNodeController | | | | | +-- "component" => Component_InstituteAddress | | | +-+ "layout" => PanelController | | | +-+ "1" => SectionController | | | +-+ "0" => PageNodeController | | | +-- "component" => Component_PageImage | +-- breadcrumbs BreadcrumbMenuController | +-- submenu SubMenuController Beim Löschen wär das ähnlich ungeschickt, das jedem Controller selbst zu überlassen. Der Ablauf ist der: - Entferne alle Seiten-Knoten aus der Seitenversion xyz - Für alle Komponenten, die in keine Seite eingebunden sind: --- Baue die Komponente --- Component->remove() Basti | ||
| | |
| | Nach oben #8 | |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 112
| Zitat:
Nach deinem Beispiel bin ich der Meinung, dass man hier in Model der Anwendung und reiner GUI-Logik unterscheiden müsste. Das kann so aussehen: * Business-Schicht baut das Model so auf, das es die GUI in einem bestimmten Zustand repräsentiert * Die GUI wird gemäß Model aufgebaut Damit sparst du dir theoretisch die Abbildung der Abhnängigkeit zwischen Datenobjekten und GUI-relevanten Objekten und kannst die GUI durch Zugriff auf das Model aufbauen und erzeugen lassen. In einfacher Form habe ich das letztens für eine Admin-GUI implementiert. Hier wird über eine FrontController-Action ein Model aufgebaut, das beschriebt, welche Views in welcher Form angezeigt werden sollen (View<->Content-Mapping). Anschließend wird die Präsentationsschicht erzeugt und die einzelnen Views ziehen aus dem Model die Info, welcher Content im View angezeigt werden soll. So bin ich absolut flexibel, spare mir jedoch die Vermischung von Datenobjekten und Model (die in der reinen Lehre IMHO auch nicht existiert). In deinem Konkreten Anwendungsfall könnte die FrontController-Action einen definierten Zweig "löschen", sprich im Model mit NULL kennzeichnen und die Präsentationskomponente weiß genau, dass dieser Zweig (=View) nicht angezeigt werden darf/soll. Hope this helps!
__________________ Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Have a look at http://www.adventure-php-framework.org! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| | |
| | Nach oben #9 | ||||
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 745
| Hi Christian. Termindruck hat mich zum Pfuschen getrieben (wenn man so will) in sofern suche ich gerade nicht mehr akut nach einer Lösung. Hab immer noch nicht klar, wie das wirklich außer gehen soll. Zitat:
Die Controller sind ja aber viel viel mehr an die Benutzerschnittstelle gebunden und entscheiden anhand der Benutzereingaben, was weiter geschehen soll (vielleicht hier eben *was* anstatt *wie*). Zitat:
Letztlich käme dann entweder sowas wie Prado raus oder eine Lösung, die extrem „unperformant“ ist: Es wird grundsätzlich unterschieden zwischen einer Anfrage, die was verändern will und einer, die nur eine bestimmte Sicht fordert (wie GET und POST ja auch gemeint waren). Im ersten Schritt wird, falls es eine „ So ähnlich wollte ich das ursprünglich umsetzen, aber es ist nicht sehr effektiv. Zitat:
Kann mal einer bitte HTTP abschalten und … grrrr Basti | ||||
| | |
| | Nach oben #10 | |
| Neuer Benutzer Registriert seit: 18.08.2005
Beiträge: 9
| Zitat:
| |
| | |
![]() |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| PHP und das Observer-Pattern (MVC) | Ben | Anwendungsdesign / Softwarearchitektur | 14 | 26.05.2006 14:47 |
| MVC, Event-Driven-Development, ... in Webanwendungen, Gedanken von Harry Fuecks | Ben | Plauderecke | 0 | 28.12.2005 19:12 |
| MVC - Was darf die View | NewYork | Anwendungsdesign / Softwarearchitektur | 2 | 03.11.2005 22:42 |
| MVC, Strukturierung, Reaktion auf Events... | Ben | Allgemeine Java-Programmierung | 7 | 17.06.2005 16:34 |
| MVC Architektur, GUI | Java17 | Desktop-Applikationen und Grafik | 3 | 03.03.2005 06:21 |
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:53 Uhr.
Nach oben







