Hallo,
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?
Generell würde ich in das Model möglichst wenig Geschäftslogik packen. Ins Model gehören IMO einfache Zugriffsfunktionen für die Daten und meinetwegen noch einfache Konvertierungsfunktionen (die bestimmte Daten so aufbereiten, dass sie in der Form vorliegen, wie sie der Controller braucht).
Business-Logik ist eher in der Controller-Schicht zu Hause.
Ob Du das aber alles im Controller abdecken willst, hängt ein bisschen davon ab, wie umfangreich die Berechnungen sind, und ob Du sie nur in einem Controller benötigst oder in mehreren.
Beispiel: Du baust ein Blog-System, und hast folglich
- Ein "UserModel" welches Daten von Benutzern (Name, Email, Passwort usw.) bereit stellt
- Einen "UserController", welcher Benutzer anlegen, löschen usw. kann
- Ein "BlogArticleModel" mit den Daten eines Blog-Eintrages
- Einen "BlogArticleController" zum Erstellen, Verwalten und löschen von Einträgen.
Angenommen, der "BlogArticleController" soll das Anlegen von Artikeln nur erlauben, wenn der Benutzer eingeloggt ist. Wo baut man die Methoden zur Zugriffsprüfung ein, möglichst ohne Abhängigkeiten von Komponenten zu erzeugen, die nichts miteinander zu tun haben?
In so einem Fall würde ich eine eigene Klasse vorsehen, welche auf das UserModel zugreift, und in der Zugriffsprügungen stattfinden. Diese Klasse kann dann von beliebigen Controllern genutzt werden.
In großen Systemen wird so etwas oft als "Dienst" realisiert - jede Klasse kann über einen bestimmten Mechanismus einen Dienst aufrufen, der die benötigte Funktionalität bereit stellt (in unserem Beispiel also sowas wie einen "Authentifizierungs-Dienst", der den Benutzer authentifiziert). Dienste können dann ihrerseits wieder andere Dienste aufrufen.
Bei einer solchen Service-orientierten Architektur übernehmen im Extremfall die Controller nur noch die Aufgabe, die Request-Parameter korrekt entgegen zu nehmen und dann an die entsprechenden Dienste zur Verarbeitung weiter zu geben.
Aber wie gesagt, so ein Architekturmonster braucht man nur bei großen Systemen. Im Kleinen hilft es schon, sich kleine Helper-Klassen zu bauen.
hope that helps,
Jörg