2009-04-15 9 views

Antwort

1

Der Controller verfügt über zwei traditionellen Rollen:

  1. das Eingabeereignis von der UI (eingetragene Handler oder Rückruf) Handhabung

  2. das Modell einer Aktion benachrichtigt - was zur Folge haben kann oder nicht

es führt keine Datenvalidierung in einer Änderung auf dem Zustand des Modells ist, dass auf dem Modell, noch hat es jeder sagen, wie Informationen präsentiert werden.

+0

Allgemeiner koordiniert der Controller die Ansicht und das Modell. Wenn es Änderungen am Modell aufruft, würde dies indirekt geschehen. Zum Beispiel über Fassadenmethoden. Die Absicht ist, die Geschäftslogik von der Benutzerschnittstelle zu isolieren. –

+0

In diesem Sinne wird die Idee der Modellbindung an Webuser-Eingabe in der Controller-Methode nicht empfohlen? – zsharp

0

Die Model Services müssen nicht die Existenz des Controllers kennen, daher kann der Controller das Zeug machen, was immer die View benötigt, indem er die Model Services nutzt.

1

Es hängt weitgehend vom Umfang Ihrer Anwendung ab. Wenn es relativ schnell und schmutzig ist, dann hat es keinen Sinn, zu übersteuern, und natürlich können Ihre Controller mit Ihren Modellobjekten sprechen. Auf der anderen Seite, wenn es aus irgendeinem Grund "Enterprise" sein muss, ist ein gutes Muster in Verbindung mit MVC der sogenannte "Business Delegate". Hier können Sie grobkörnige Methoden aus einer oder mehreren Methoden für ein oder mehrere Modellobjekte zusammenstellen; zum Beispiel ein Objekt löschen und dann eine aktualisierte Liste ohne dieses Objekt zurückgeben. Diese Schicht bietet zwei Vorteile. Zum einen entkoppelt es die Controller von jedem ORM-System, das für Modellobjekte verwendet wird. Außerdem ist es die Schicht, die schließlich konstruktiv mit eventuell aufgetretenen Ausnahmen umgehen muss, anstatt sie erneut zu werfen.

1

Ich glaube nicht, dass ein Controller mit Modellobjekten zu tun haben sollte.

Ich neige dazu zu denken, dass Controller wirklich Teil der UI-Tier ist. Ich bevorzuge es, eine Serviceschicht zwischen dem Controller und dem Rest der App einzufügen. Die Webschicht akzeptiert HTTP-Anforderungen, entfernt Parameter von Anforderungsobjekten in Objekte, die von der Serviceschnittstelle verarbeitet werden können, und leitet die Antwort zum Zurücksenden um. Die gesamte Arbeit mit Transaktionen, Arbeitseinheiten und dem Umgang mit Modell- und Persistenzobjekten wird vom Dienst ausgeführt.

Dieser Ansatz ist serviceorientierter. Es trennt den Dienst von der Benutzerschnittstelle und lässt die Möglichkeit offen, dass mehrere Clients denselben Dienst wiederverwenden können. Es macht die Schicht, die Anfragen an den Dienst "marschiert", "dünn", so dass es einfach ist, SOAP-Dienste für REST oder EJB oder CORBA oder was immer die nächste neue Sache sein wird, auszuschalten.

+0

ok, wenn Sie die IP der Anfrage ziehen möchten, würden Sie es in der Service-Schicht oder in der Steuerung tun? – zsharp

+0

das gleiche für die Benutzeridentifikation? – zsharp

+0

Controller für die IP-Adresse. Was die Sicherheit angeht, so ist es ein Querschnittsthema, also gehört es in einen Aspekt. – duffymo

Verwandte Themen