Bedenken sind ein einfaches, aber wirkungsvolles Konzept. Es ist für die Wiederverwendbarkeit von Code vorhanden. Grundsätzlich besteht die Idee darin, allgemeine und / oder kontextspezifische Codestücke zu extrahieren, um die Modelle zu bereinigen und zu vermeiden, dass sie zu fett und unhandlich werden.
Ich möchte ausdrücklich angeben, dass Sie Serviceobjekte verwenden sollten, um Funktionen bereitzustellen, die nicht das spezifische Objekt betreffen. ZB hat eine Organisation viele Benutzer. Jetzt muss der Administrator der Organisation eine CSV aller Benutzer für diese Organisation exportieren. Dieser Code kann in das Organisationsmodell eingefügt werden. Da er jedoch nicht in der Verantwortung des Organisationsobjekts liegt, sollte dieser Code in eine Klasse eingefügt werden, in der Sie nur das Organisationsobjekt übergeben und die CSV aller Benutzer zurückgeben.
class Services::GenerateCsv
def self.get_users org
#add logic the fetch users for the org and generate the CSV and return the CSV data
end
end
Wann immer Sie eine CSV-Generierung benötigen, können Sie diese Logik in die obige Klasse einfügen. Dieser Ansatz hält das Objekt (in diesem Fall das Organisationsmodell) von dem Code frei, für den es nicht verantwortlich sein sollte. Ein allgemeines Prinzip, dem ich folge, lautet: Wenn der Code das Selbstobjekt ändert, verschieben Sie den Code in ein Serviceobjekt.
Hinweis: Ihre Frage betraf Bedenken, aber ich dachte darüber nach, einige zusätzliche Dinge hinzuzufügen, die ich befolge, um die Codebasis sauber und verwaltbar zu halten, da dies möglicherweise anderen Programmierern helfen könnte. Dieser obige Ansatz ist umstritten.