AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

MVC -- Kommunikation unter Controllern?!

Ein Thema von s.h.a.r.k · begonnen am 15. Okt 2011 · letzter Beitrag vom 17. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
Ort: Offingen
3.159 Beiträge
 
Delphi XE Professional
 
#1

MVC -- Kommunikation unter Controllern?!

  Alt 15. Okt 2011, 02:03
Hallo zusammen,

habe mich in letzter Zeit immer mehr dazu durchgerungen das MVC-Pattern für meine Applikationen zu nutzen. Nun habe ich aber folgendes Problem, da ich das ganze System eher von PHP-Frameworks her kenne: wie starte ich Aktionen eines Controllers, die nicht vom User angestoßen werden? Gibt es hier eine Art "Überstruktur" oder "Übercontroller"? Oder gibts es ein Konstrukt, welches gar kein Controller im MVC-Sinne ist?

Hintergrund ist folgender: ich hab einen Application-Controller geschrieben, der als "Bootloader" dient. Dieser startet alle möglichen Dinge (DB-Verbindung herstellen, Konfiguration laden, Startparameter verarbeiten, Splash-Screen darstellen, MainForm darstellen etc.) und muss somit ja auch andere Controller und deren Aktionen zugreifen. Ist sowas in diesem Pattern gewollt? Oder wie löst man sowas sonst?

Vorstellbar ist hier auch das Problem, dass eine Aktion immer wieder aufgerufen werden, oder allgemein gesprochen der Zugriff auf eine Aktion nicht vom User hervorgerufen werden soll, sondern von einem Programm/Code.

Bin über jeden Tipp dankbar
Armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: MVC -- Kommunikation unter Controllern?!

  Alt 15. Okt 2011, 02:37
Ich lege mir für solche "Übercontroller" Klassen (nach Bereichen - z.B. Verbindung zur DB) an, wo diese gespeichert werden.
Die Klasse selber leite ich von TComponent ab und gebe der Instanz als Owner Application mit.

Aber für eine Aktion egal welcher Art muss es doch ein Event geben ... und sei es nur ein Timer der feuert ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
Ort: Offingen
3.159 Beiträge
 
Delphi XE Professional
 
#3

AW: MVC -- Kommunikation unter Controllern?!

  Alt 15. Okt 2011, 02:57
Das mit dem immer auftretenden Aufruf war auch nur ein Beispiel. Es geht dabei eher darum, dass Aktionen von Controllern nicht vom User selbst (Click auf Button z.B.) aufgerufen werden, sondern von z.B. einem Programmcode -- in meinem konkreten Beispiel wäre das der Startcode meiner Anwendung. Je mehr ich so darüber nachdenke, desto mehr glaube ich, dass ich so eine Überkomponente bauen sollte, die nicht mit dem MVC-Pattern direkt etwas zu tun hat. Diese ist dann -- in meinem speziellen Fall -- eben eine Art "Container", in dem dann alles abläuft, in dem dann auch die Controller "liegen", die eben ihre Aktionen anbieten.
Armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: MVC -- Kommunikation unter Controllern?!

  Alt 15. Okt 2011, 03:06
Meinst du jetzt irgendwelche Instanzen oder einfach nur Units?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
webcss

Registriert seit: 10. Feb 2006
255 Beiträge
 
Delphi XE2 Professional
 
#5

AW: MVC -- Kommunikation unter Controllern?!

  Alt 15. Okt 2011, 10:40
Je mehr ich so darüber nachdenke, desto mehr glaube ich, dass ich so eine Überkomponente bauen sollte, die nicht mit dem MVC-Pattern direkt etwas zu tun hat. Diese ist dann -- in meinem speziellen Fall -- eben eine Art "Container", in dem dann alles abläuft, in dem dann auch die Controller "liegen", die eben ihre Aktionen anbieten.
Im Prinzip hast Du diese Überkomponente schon: TApplication. Du kannst einen ApplicationController bauen, als wrapper für global Application, und hookst (<-was ein Wort) dort z.B. den OnMessage event von TApplication. Der Application Controller enthält eine Liste mit allen ChildControllern und leitet die Messages weiter, bis einer Handled true setzt (Chain of Responsability). Die VCL macht das eigentlich nicht anders, nur, das eben die Logik auf einer Form liegt, und nicht ausgelagert ist.
"Wer seinem Computer Mist erzählt, muss immer damit rechnen..." (unbekannt)
"Der Computer rechnet damit, dass der Mensch denkt..." (auch unbekannt)
mein blog
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
Ort: Offingen
3.159 Beiträge
 
Delphi XE Professional
 
#6

AW: MVC -- Kommunikation unter Controllern?!

  Alt 15. Okt 2011, 11:14
Meinst du jetzt irgendwelche Instanzen oder einfach nur Units?
Ein Controller ist bisher nur eine Klasse. Wie viele Instanzen ich davon habe kann ich dir pauschal leider nicht sagen, da ich das noch nicht komplett durchdacht habe. Ich wollte schon fast jeden Controller zu einem Singleton umbauen, aber bin mir da noch nicht so wirklich sicher, ob das sinnvoll ist.

Im Prinzip hast Du diese Überkomponente schon: TApplication. Du kannst einen ApplicationController bauen, als wrapper für global Application, und hookst (<-was ein Wort) dort z.B. den OnMessage event von TApplication. Der Application Controller enthält eine Liste mit allen ChildControllern und leitet die Messages weiter, bis einer Handled true setzt (Chain of Responsability). Die VCL macht das eigentlich nicht anders, nur, das eben die Logik auf einer Form liegt, und nicht ausgelagert ist.
Jup, ich habe bisher einen Wrapper für dieses TApplication-Objekt, wobei ich hier auf die Nachrichtenverwaltung nicht näher eingehe. Bisher unterstützt mich dieses Objekt nur beim "Hochfahren" und "Herunterfahren" der Anwendung. Insgesamt soll später mal eine Framework herauskommen, welches ich vor allem bei größeren Applikationen nutzen will.

Das mit den Messages muss ich mir mal anschauen, denn die Idee ist an sich nicht schlecht. Nur schaffe ich somit wieder Abhängigkeiten zwischen den einzelnen Controllern und deren Aktionen -- aber ich habe sowas ja eigentlich immer irgendwie, weswegen ich dann aber ein sinnvolles System aufbauen müsste, in so fern ich über Botschaften laufen will.
Armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.374 Beiträge
 
#7

AW: MVC -- Kommunikation unter Controllern?!

  Alt 15. Okt 2011, 16:22
Was du suchst, nennt sich Mediator-Pattern. Ich arbeite damit recht häufig privat, allerdings in Csharp: Jeder Controller hat eine Basisklasse, die wiederum einen statischen Mediator besitzt. So ist gewährleistet, dass jeder Controller dieselbe Instanz nutzt.

Kommuniziert wird klassisch, über String-Messages. Könnte man vielleicht auch mal ändern, muss man aber nicht. Jeder Controller muss sich dabei mit den Messages beim Mediator registrieren, für die er Nachrichten empfangen möchte.

Falls du ein bisschen C# kannst, kannst du dir ja mal dieses Beispiel ansehen und versuchen, dort etwas für dich abzuleiten. Mit Delphi kann ich leider nicht dienen.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
webcss

Registriert seit: 10. Feb 2006
255 Beiträge
 
Delphi XE2 Professional
 
#8

AW: MVC -- Kommunikation unter Controllern?!

  Alt 15. Okt 2011, 23:52
Du solltest Dir auch mal TObject.Dispatch anschauen...
hier ist auch noch ein link dazu: The-quest-for-the-perfect-publish-subscribe-mechanism-in-Delphi
Ich arbeite an einem MVP framework und stehe vor demselben Problem
"Wer seinem Computer Mist erzählt, muss immer damit rechnen..." (unbekannt)
"Der Computer rechnet damit, dass der Mensch denkt..." (auch unbekannt)
mein blog

Geändert von webcss (16. Okt 2011 um 00:45 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
5.954 Beiträge
 
Delphi XE4 Professional
 
#9

AW: MVC -- Kommunikation unter Controllern?!

  Alt 16. Okt 2011, 09:44
Hallo,

wer sagt, dass ein Controller nur Nutzer-Eingaben verwaltet.
Warum baust du dir keinen "System"-Controller, den du mit Anweisungen fütterst.
Dieser Controller führt die Anweisungen aus, so als wenn ein User selber geklickt hätte.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
Ort: Offingen
3.159 Beiträge
 
Delphi XE Professional
 
#10

AW: MVC -- Kommunikation unter Controllern?!

  Alt 17. Okt 2011, 16:06
Danke schon mal für die Gedanken und Hinweise! Vor allem bzgl. der Kommunikation der Controller untereinander bin ich nun sehr viel schlauer und werde dahingehend wohl einiges umbauen

Seltsam finde ich auf die Dauer nur, dass mir sowas nicht viel früher über den Weg gelaufen ist und ich hier einfach zu wenig über genau sowas finde. Dachte schon ich habe sehr komische Probleme, die keinem anderen über den Weg laufen...
Armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf