[RUBY] Rails Refactoring Geschichte vor Ort gelernt

Geschichte auf dem Gebiet gelernt

Es ist eine allgemeine Architektur, die wir bei der Entwicklung von Rails kennen.

Beachten Sie, dass Sie darauf achten, kein Fettregler oder Fettmodell zu werden. Da es sich um einen zufälligen Satz handelt, werde ich ihn entsprechend korrigieren.

Der Controller ist einfach! !!

Letztendlich ist die Verantwortung, den Controller folgen zu lassen, wie folgt.

** "Erstellen Sie eine Instanz, führen Sie eine Methode darauf aus und geben Sie eine Antwort zurück" **

nur das.

Das ist das Schlimmste zu sagen.

ruby:example.contoroller.rb



Es gibt keine solche Aktion

def index
  @most_funded_projects = []
    most_funded_projects = Project.most_funded.includes(:main_image)
    most_funded_projects.each do |most_funded_project|
      break if @most_funded_projects.count >= 3
      if @site_project_descriptions[most_funded_project.id].present?
        @most_funded_projects << most_funded_project
      end
    end
    if @most_funded_projects.count < 4
      current_site.published_projects.order(updated_at: :desc).each do |project|
        break if @most_funded_projects.count >= 3
        @most_funded_projects << project
    end
  end 
end


Gorigoris Geschäftslogik ist auf dem Controller geschrieben. Ich habe einen solchen Controller geschrieben und war vorsichtig. Wenn Sie einen Controller mit Gerüst herstellen, können Sie einen Controller mit der folgenden einfachen Form herstellen, aber im Grunde ist es ideal, ihn nach diesem Gefühl herzustellen.

example.rb



def index
  @friends = Friend.all

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @friends }
  end
end

Kurz gesagt, das Folgende ist die Grundform

@hoge = Hoge.new
@hoge.hoge
Gibt eine Antwort zurück

Wenn der Controller anschwillt, gehen Sie zuerst zum Modell! !!

In der Steuerung war es wichtig, ein Image des Erstellens einer dem Modell zugeordneten Instanz und des Ausführens einer Methode darauf zu haben. Wenn Sie also darüber nachdenken, Ihre gesamte Geschäftslogik in das Modell einzubeziehen. Da es jedoch ein weiteres Problem gibt, alles zusammenzusetzen, besteht das Bild des Einfügens von Dingen in das Modell hauptsächlich aus ** Dingen im Zusammenhang mit Persistenz und Geschäftslogik **, die durch den Betrieb eines einzelnen Modells vervollständigt werden. ist.

Die im Modell zu implementierenden Muster sind im Allgemeinen wie folgt.

Ich denke, dass eine einfache Verarbeitung wie das einfache Aktualisieren einer einzelnen Tabelle hauptsächlich gilt und ansonsten die Geschäftslogik, die mit einem einzelnen Modell abgeschlossen wird.

Nutzung der Serviceklasse

Prozesse wie mehrere Modelloperationen und Dateivorgänge werden als Service-Schicht als Einheit der atomaren Geschäftslogik herausgeschnitten.

Erstellen Sie im folgenden Formular eine normale Klasse, die nicht mit ActiveRecord verknüpft ist (nicht eins zu eins mit der Tabelle verknüpft). Es ist so, als würde man eine Klasse erstellen und komplexe Logik über mehrere Modelle hinweg von einem vorhandenen Modell trennen. Es ist einfach zu bedienen, erstellen Sie einfach eine Instanz der Klasse und führen Sie die Methoden aus, die Sie dafür erstellt haben.

exmple.rb


class ExampleService
  def initialize
    ....
  end

  def example
    ....
  end
end

Schneiden Sie Consern und Namespace aus und erstellen Sie eine Klasse im Modellverzeichnis

Selbst mit der eingeführten Methode können Sie, wenn das Modell oder die Serviceklasse fett wird, den Namespace unter dem Modellverzeichnis ausschneiden, eine einfache Klasse erstellen, die nicht eins zu eins mit der Tabelle ist, und das Modell oder den Service, das dort fett wird. Es gibt auch eine Technik, die verhindert, dass das Modell und die Serviceklasse fett werden, indem die Methode, die in der Klasse universell einsetzbar zu sein scheint, hierher übertragen wird. Sie können consern auch verwenden, um redundante Dinge in einem zu kombinieren. Beispielsweise ist es ein Bild, das die Modelle / {Tabellenname} / {Anwendungsfall} .rb erstellt und den Prozess ausschneidet. Definieren Sie zur besseren Sichtbarkeit Instanzvariablen in Controller.

Zusammenfassung der Aufteilung von Controller / Service / Modell

Recommended Posts

Rails Refactoring Geschichte vor Ort gelernt
Über das Symbol <%%> in Rails erb
Asynchrone Kommunikation im interaktiven Kommentarfeld
Die Geschichte des Schreibens von Java in Emacs
[Rails] Setzen Sie die Datenbank in der Produktionsumgebung zurück
Rails6: Extrahieren Sie das Bild im Aktionstext
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
Die Geschichte des einfachen String-Vergleichs in Java
Die Geschichte eines gewöhnlichen Othello in Java
Eine Geschichte über das JDK in der Java 11-Ära
Ich habe versucht, die Sitzung in Rails zu organisieren
Die Geschichte des Lernens von Java in der ersten Programmierung
[Schienen] Mehrstufige Kategorien in der Ausschussliste anzeigen
Group_by in Rails
Refactoring in JUnit
So überprüfen Sie Rails-Befehle im Terminal
[Rails] Ich habe den Unterschied zwischen Ressourcen und Ressourcen untersucht
So stellen Sie die Anzeigezeit in Rails auf japanische Zeit ein
Ist der Bruch nicht schlecht in der Programmierung? Die Geschichte.
Die Geschichte einer illegalen staatlichen Ausnahme in Jetty.
[Ruby / Rails] Legen Sie einen eindeutigen (eindeutigen) Wert in der Klasse fest
Fragen zur Implementierung der Like-Funktion (Ajax) in Rails
SSL in der lokalen Umgebung von Docker / Rails / Puma
[Schienen] So zeigen Sie Bilder in der Ansicht an
Die Geschichte, dass .java auch in Unity 2018 erstellt wurde
Ruby on Rails 5 - Kurzanleitung zum Lernen, die im Feld Zusammenfassung verwendet werden kann
Modellassoziation in Rails
Hinzufügen von Spalten in Rails
Deaktivieren Sie Turbolinks in Schienen
^, $ im regulären Ausdruck von Rails
Verwenden Sie Bilder mit Schienen
Migration in Schienen verstehen
Klicken Sie auf die Schaltfläche [Schienen], um ein zufälliges alphanumerisches Kennwort zu erstellen und in das Kennwortfeld einzugeben
Teilen Sie route.rb in Rails6
Beherrsche das [Rails] Scope!
Markdown in Rails implementiert
Starten Sie die Rails-App lokal im Produktionsmodus (API Server Edition).
[Ruby on Rails] Zeigt den Seitentitel schnell im Browser an
Die Geschichte des Werfens von BLOB-Daten von EXCEL in DBUnit
[Rails] Bei der Beschreibung der Validierung ist Vorsicht geboten
[Docker] Eine Geschichte über einen Fehler beim Erstellen von Docker
Verwenden Sie mit Rails6 Ihre eigene Klasse im lib-Verzeichnis
[Schienen] Anzeigen von Informationen, die in der Datenbank gespeichert sind