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.
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
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.
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
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.
Recommended Posts