hotti: MVC Verständnisproblem

Beitrag lesen

hi,

Was ist, wenn ich nicht einfach Daten vom Model 1 zu 1 übernehme und dan die Views weitergebe? Sollte das alles im Controller stattfinden oder in einer getrennten Klasse?

Interessant wird hier das decorator pattern. Es ist umstritten aber es ermöglicht, dass Controller-Classes an beliebige View-Classes gebunden werden, die View-Class wird zur Laufzeit mit Controller-Funktionalitäten ausgestattet bzw. erweitert; Beispiel:

Du hast eine ViewClass (nennen wir sie 'ViewClass'), die bisher nur irgendwelche Dokumente (URLs /foo.html, /bar.html...) ausgibt. Eines der Dokumente liegt auf /foo.html und soll ein Feedback-Formular bekommen. Klarer Fall: Hierzu sind Eingaben zu verarbeiten, was /foo.html nicht kann, die zuständige ViewClass 'ViewClass' hat keinen Controller. Lösung: /foo.html bekommt ein zusätzliches Attribut verpasst:

control=feedback

feedback ist eine Klasse, die erst in dem Moment, wenn Eingaben über /foo.html ankommen, weiß:
Aha, ich gehöre ab sofort zur ViewClass. Die Instanz der ViewClass, deren Erstellung zu diesem Zeitpunkt bereits in der Vergangenheit liegt, steht, aufgrund des decorator-patterns in ALLEN Methoden der class 'feedback' zur Verfügung, Beispiel:

  
# class 'feedback'  
sub control{  
   my $self = shift; # Instanz der ViewClass  
   if($self->param('senden')){ # $self ruft eine seiner Methoden auf ('param')  
   } # sende feedback  
   else{ return $self->errorP(title => 'Eingabefehler', descr => 'Unbekannter Parameter') }  
}  

Andere Lösung (herkömmlich, !decorator): class feedback extends VieClass
Aber hier müsstest Du von vornherein die Instanz über ViewClass::feedback erstellen.

Horst