2009-05-20 4 views
3

Ich arbeite daran, meine Anwendung neu zu schreiben, basierend auf Dingen, die ich auf der RailsConf 2009 gelernt habe. Ich verstehe, dass Model, Controller und View miteinander in Beziehung stehen. Allerdings habe ich mit dem "richtigen" Level für einen Controller gekämpft.Rails und MVC Metaphern

Wenn die Rails Modell Karten (grob) zu einer Datenbanktabelle ... Und wenn die Rails-Ansicht Karten (grob) in einer Browser-Seite ...

Was bedeutet die Rails-Controller Karte?

Antwort

3

Der Controller ist ein Mittel zur Verbindung von Modellen zu Views unter Verwendung der Logik, Einschränkungen und Bedingungen Ihrer Lösung.

Also, ich nehme an, es könnte zu den "Gehirnen" Ihrer Lösung zuordnen.

1

Der Controller wird im Kontext, nach dem Sie suchen, in keiner Weise zugeordnet. Sie müssen sich den Controller als den Kleber vorstellen, den Sie verwenden, um das Modell mit der Ansicht zu versehen.

Das Modell legt Ihre Daten fest.

Die Ansicht enthält die Darstellung von Daten.

Der Controller ist dafür verantwortlich, die Anfrage zu übernehmen und das richtige Modell und die Ansicht erneut aufzurufen ... und dieses Ergebnis dann dem Benutzer zu präsentieren.

-2

Wenn Ihr für eine Metapher für MVC einen suchen, der mir die Dinge ein wenig zu bekommen geholfen einfacher, wenn ausgehend dachte ich an Dinge wie diese:

  • Modell - Ihr Skelett (Hilft, die Struktur der Dinge)

  • -Controller - Ihre Muskeln (alles hilft sich zu bewegen und zu tun, die benötigt Aufgaben)

  • Ansicht - Ihre Äußere Erscheinung (Es ist, wie die Welt, was die anderen beiden Teile tun sieht)

, dass der einfachste Weg, das ich mit mir selbst kommen konnte mich zu bekommen, um „Get it“ hoffentlich hilft. Auch hier würde der Controler in diesem Teil sich auf alles "abbilden", was für Ihre Anwendungen funktioniert.

+0

Ich denke, das ist eine schlechte Metapher. Das Modell sollte die erforderlichen Aufgaben ausführen. Der Controller ähnelt mehr einem Skelett IMHO. –

1

Jeder möchte es mit Klebstoff oder Muskeln oder etwas anderem vergleichen, aber es ist irgendwie schlecht für all diese, weil es ein Übersetzer zwischen dem Modell und der Ansicht ist. Muskel dient nicht als Eingabefunktion, nur Ausgabe, Nerven und Sinne liefern den Input in dieser Analogie. Kleber haftet nur zwei Dinge zusammen, es ändert sie nicht.

Die Controller-Schicht in MVC ist dafür verantwortlich, Daten aus dem Modell herauszunehmen und sie in eine Form zu übersetzen, die für den Betrachter bereit ist, sie anzuzeigen. Ein perfektes Beispiel dafür sind drei verschiedene Seiten, die alle Daten in der gleichen (oder sehr ähnlichen) Form darstellen, aber die angezeigten Daten stammen aus sehr unterschiedlichen Quellen. In jedem dieser Fälle wird möglicherweise derselbe Ansichtscode verwendet. Der Controller ist jedoch derjenige, der verschiedene Funktionen im Modell aufrufen kann, um die Daten anzuzeigen und in den richtigen Sammlungsnamen zu übernehmen, damit die Ansicht gefunden und angezeigt werden kann es, , obwohl die Ansicht tatsächlich unwissend ist, was es anzeigt.

Aber das ist nicht die einzige Aufgabe für die Controller-Schicht, da sie auch die Übersetzung der Benutzeranforderungen in Aktionen auf dem Modell durchführen muss. Der Benutzer hat auf einen Link geklickt oder etwas in ein Feld eingegeben oder einen Schieberegler verschoben, was zu einer oder mehreren Aktionen im Modell führen kann. Es sollte keine wirkliche Geschäftslogik sein, Entscheidungen zu treffen, aber wenn Sie zum Beispiel eine Checkbox hatten, die sagte "Mach das dreimal", aber das Modell hatte nur eine Funktion, einmal etwas zu tun, wäre der Controller dafür verantwortlich, die Funktion des Modells drei zu nennen Mal um die Aktion auszuführen.

Wenn Sie eine Analogie haben müssen, würde ich Michaels Antwort von "Gehirne" verwenden.

+0

"verantwortlich für die Übernahme von Daten aus dem Modell", was macht das DAO, oder ist das ein Teil der Controller-Schicht? –

0

Der Controller ist der Manager oder Koordinator. Denken Sie an Modelle und Ansichten als zwei verschiedene Gruppen innerhalb eines Unternehmens (vielleicht Vertrieb und IT). Der Controller ist die Person, die über diesen beiden sitzt und sicherstellt, dass sie gut zusammenspielen.

Nachdem dies gesagt wurde, werden alle diese Metaphern in gewisser Weise fehlerhaft sein. Zum Beispiel stellt der Controller normalerweise sicher, dass ein Benutzer für Seiten angemeldet ist, für die der Benutzer angemeldet sein muss. Das passt nicht wirklich in meine Metapher oder einige der anderen.

0

Der Controller ist eng mit der URL verknüpft, insbesondere bei Verwendung von RESTFUL-Ressourcen.

Ich denke gerne an die URL als Befehlszeilenschnittstelle für Ihre Anwendung.