Frage

In Ruby on Rails Entwicklung (oder MVC im Allgemeinen), was eine schnelle Regel soll ich folgen, wo Logik zu setzen.

Bitte beantworten Sie mit Ja. - Mit Diese Mitteilung hier setzen , anstatt Legen Sie nicht, dass es

War es hilfreich?

Lösung

MVC

Controller : Setzen Sie Code hier, die mit der Ausarbeitung zu tun hat, was ein Benutzer will, und zu entscheiden, was sie zu geben, arbeiten, ob sie angemeldet sind, ob sie bestimmte Daten sehen sollten, usw. am Ende. sucht der Controller bei Anfragen und arbeitet heraus, welche Daten (Modelle) zu zeigen, und welche Ansichten zu machen. Wenn Sie im Zweifel sind, ob Code in der Steuerung gehen sollte, dann sollte es wohl eher nicht. Halten Sie Ihre Controller dünn .

: Die Ansicht nur den minimalen Code enthalten sollte Ihre Daten (Modell) angezeigt werden, sollte es eine Menge Verarbeitung oder Berechnung nicht tun, sollten sie Daten berechnet (oder zusammengefasst) wurden die Anzeige von das Modell, oder von der Steuerung erzeugt. Wenn Ihre Ansicht wirklich Verarbeitung tun muss, die nicht vom Modell oder Controller-getan werden kann, setzen Sie den Code in einem Helper. Viele Ruby-Code in einer Ansicht macht die Seiten Markup schwer zu lesen.

Modell : Ihr Modell sollte in dem alle Ihr Code, der auf Ihre Daten (die Einheiten betrifft, die Ihre Website zB Benutzer bilden, Post, Konten, Freunde usw. ) Leben. Wenn Code muss speichern, aktualisieren oder Daten zusammenfassen, um Ihre Entitäten im Zusammenhang, setzen Sie es hier. Es wird über Ihre Ansichten und Controller wiederverwendbar sein.

Andere Tipps

So fügen Sie Antwort auf pauliephonic suchen:

Helper : Funktionen erleichtern die Erstellung der Ansicht zu machen. Zum Beispiel sind, wenn Sie immer eine Liste von Widgets Iterieren über ihre Preise angezeigt werden, setzen Sie sie in einen Helfer (zusammen mit einem Teil für die eigentliche Anzeige). Oder wenn Sie ein Stück von RJS, die Sie wollen nicht die Ansicht unübersichtlich, steckt es in einen Helfer.

Das MVC-Muster ist wirklich nur mit UI und nichts anderes. Sie sollten keine komplexe Geschäftslogik in der Steuerung setzen, da sie die Ansicht steuern aber nicht die Logik. Der Regler sollte sie beschäftigen mit der richtigen Ansicht auswählen und komplexere Sachen auf das Domain-Modell (Model) oder die Business-Schicht übertragen.

Domain Driven Design hat ein Konzept von Dienstleistungen, die ein Ort, den Sie Logik halten, die eine Anzahl von verschiedenen Arten von Objekten orchestrieren muss die in der Regel bedeutet, Logik, die nicht natürlicherweise auf einer Modellklasse gehört.

Ich denke, im Allgemeinen der Service-Schicht als die API meiner Anwendungen. Meine Dienste Schichten Karte in der Regel ziemlich genau auf die Anforderungen der Anwendung, die ich in den unteren Ebenen meiner app gefunden so die Service-Schicht wirkt als eine Vereinfachung des komplexeren Wechselwirkungen bin zu schaffen, dh Sie das gleiche Ziel, die Service-Schichten unter Umgehung erreichen könnten aber Sie würden viel mehr Hebel ziehen müssen, damit es funktioniert.

Beachten Sie, dass ich rede nicht über Rails hier Ich spreche über eine allgemeine Architektur, die Ihr Problem behebt.

Perfect Erklärungen hier bereits ein sehr einfacher Satz als Abschluss und leicht zu merken:

  

Wir brauchen SMART-Modelle, THIN Controller und STUMME Ansichten.

http://c2.com/cgi/wiki?ModelViewController

Der Rails Weg ist, hat dünn Controller und Fett-Modelle .

put Sachen genehmigungs / Zutrittskontrolle in der Steuerung im Zusammenhang tun.

Alle Modelle sind alle über Ihre Daten. Validation, Beziehungen, CRUD, Business Logic

Ansichten sind über Ihre Daten. Display und immer nur Eingabe.

Controller ist über die Steuerung, welche Daten aus dem Modell zu Ihrer Ansicht geht (und welche Ansicht) und aus Ihrer Sicht zu Ihrem Modell. Controller können auch ohne Modelle existieren.

Ich mag den Controllers als Wachmann / Rezeptionistin denken, die Ihnen den Kunden (Anfrage) an den entsprechenden Zähler leitet, wo Sie einen Kassierer fragen (Ansicht) eine Frage. Der Kassierer (Ansicht), dann geht und bekommt die Antwort von einem Manager (Modell), die Sie nie sehen. Sie die Anforderung dann an den Wachmann / Rezeptionist (Controller) zurück und warten Sie, bis Sie gerichtet sind, einen anderen Teller gehen (Ansicht), die Ihnen die Antwort der Manager (Modell) erzählt sagte ihnen, als Reaktion auf die anderen Tellers (Ansicht) Frage .

Ebenso, wenn Sie den Teller (Ansicht) etwas dann weitgehend das gleiche passiert mit Ausnahme der zweiten Geld wird Ihnen sagen, ob der Manager akzeptiert Ihre Informationen mitteilen möchten. Es ist auch möglich, dass der Wachmann / Rezeptionist (Controller) gesagt haben, können Sie eine Wanderung zu nehmen, da Sie nicht, dass die Informationen an den Manager zu sagen autorisiert wurden.

So die Metapher zu verlängern, in meiner klischee und unrealistische Welt, Sager (Ansichten) sind hübsch, aber eitle und oft glauben, alles, was Sie ihnen sagen, Wachmann / Rezeptionisten minimal sind höflich, aber nicht sehr gut informiert, aber sie wissen, wo Menschen sollten und sollen nicht gehen und Manager sind wirklich hässlich und gemein, aber alles wissen und können sagen, was wahr ist und was nicht.

Eine Sache, die richtig trennen hilft, ist das „Pass lokale Variablen von der Steuerung, um“ zu vermeiden anti-Muster. Statt dessen:

# app/controllers/foos_controller.rb:
class FoosController < ApplicationController

  def show
    @foo = Foo.find(...)
  end

end

#app/views/foos/show.html.erb:
...
<%= @foo.bar %>
...

Versuchen Sie es zu einem Getter zu bewegen, die als Hilfsmethode zur Verfügung:

# app/controllers/foos_controller.rb:
class FoosController < ApplicationController

  helper_method :foo

  def show
  end

  protected

  def foo
    @foo ||= Foo.find(...)
  end

end

#app/views/foos/show.html.erb:
...
<%= foo.bar %>
...

Dies macht es einfacher zu ändern, was in „@foo“ gesetzt wird und wie es verwendet wird. Es erhöht die Trennung zwischen Steuerung und Ansicht ohne sie jede noch komplizierter zu machen.

Nun, es ist eine Art hängt von dem, was die Logik zu tun hat ...

Oft macht es Sinn, mehr Dinge in Ihre Modelle zu drücken, so dass Controller klein. Dadurch wird sichergestellt, dass diese Logik leicht verwendet werden kann von überall müssen Sie die Daten zugreifen, die Ihr Modell darstellt. Ansichten sollten so gut wie keine Logik enthalten. Also wirklich, im Allgemeinen, sollten Sie versuchen, es zu machen, so dass Sie sich nicht selbst wiederholen Sie.

Auch ein schnell bisschen google zeigt noch ein paar konkrete Beispiele dafür, was geht, wo.

Modell: Validierungsanforderungen, Datenbeziehungen, erstellen Methoden, Aktualisierungsmethoden, zerstören Methoden finden Methoden (beachten Sie, dass Sie nicht nur die generischen Versionen dieser Methoden haben sollten, aber wenn es etwas, das Sie viel tun, wie die Suche nach Menschen mit roten Haaren nach Nachnamen, dann sollten Sie diese Logik extrahieren, so dass alles, was Sie tun müssen, ist die find_redH_by_name ( „smith“) oder so ähnlich)

nennen

Ausblick: Dies sollte alles über die Formatierung von Daten, nicht die Verarbeitung von Daten

.

Controller: Dies ist, wo Datenverarbeitung geht. Aus dem Internet: „Der Zweck der Steuerung ist auf die Aktion vom Benutzer angeforderten zu reagieren, führen Sie alle Parameter der Benutzer festgelegt hat, die Daten verarbeiten, mit dem Modell interagieren, und dann die angeforderten Daten übergeben, in seiner endgültigen Form, ab in die Ansicht. "

Ich hoffe, das hilft.

In einfachen Worten, im Allgemeinen, Modelle werden alle Codes müssen Tabelle, (n), ihre einfache oder komplexe Beziehungen (man denke an sie als SQL-Abfragen mehrere Tabellen beteiligt), Manipulation der Daten / Variablen zu einem Ergebnis mit dem Geschäft zu kommen Logik.

Controller wird Code / Zeiger auf die entsprechenden Modelle für den Auftrag angefordert.

Ansichten wird die Benutzereingabe / Interaktion übernehmen und die resultierende Antwort angezeigt werden soll.

Jede größere Abweichung von diesen werden unerwünschte Belastung setzen auf den Teil und die gesamte Anwendungsleistung beeinträchtigt bekommen kann.

Testen, Testen ... Legen Sie so viel Logik wie möglich in das Modell und dann werden Sie in der Lage sein, um es richtig zu testen. Einheit TESTS die Daten und die Art und Weise durch Testen des Modells gebildet wird, und Funktionstests zu testen, wie es weitergeleitet wird oder gesteuert von den Controllern Testen, so folgt daraus, daß sie nicht die Integrität der Daten prüfen kann, es sei denn es ist in das Modell.

j

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top