Richtlinien zum Platzieren von Klassen in Rails-Apps, die nirgendwo passen

Ich frage mich, ob es Best Practices gibt, wo nicht-standardmäßige Ruby-Dateien in Rails-Apps abgelegt werden sollen, die nicht in eines der Standardverzeichnisse passen (controllers/models usw.).

Ich spreche von Klassen, die von Controllern / Modellen usw. verwendet werden, aber keine Unterklassen einer der Rails-Basisklassen sind. Klassen, die Funktionen enthalten, die aus Modellen extrahiert wurden, um sie fettarmer zu machen. Einige von ihnen sehen aus wie Modelle, sind aber keine AR-Modelle, andere sehen eher wie "Dienste" aus, andere sind etwas dazwischen oder etwas anderes.

Ein paar zufällige Beispiele:

"Strategie" -Klassen, die die Authentifizierung mit Passwort, über Facebook usw. abwickeln"XParams" -Objekte, die params einschließen, oder "XCreator" -Objekte, die die Verarbeitung von params handhaben, um eine komplexe Aktion auszuführen, die letztendlich zur Erstellung einiger AR-Modelle führtKlassen, die Anforderungen an externe APIs senden oder diese Anforderungen und Antworten kapselngefälschte Modelle, die ein echtes AR-Modell ersetzen können (z. B. Gastbenutzer)Resque JobsKlassen, die Informationen aus Redis speichern und lesenKlassen, die bestimmte Aktionen wie das Verarbeiten von Daten, das Generieren von Berichten usw. ausführen und von Resque-Jobs oder Rake-Tasks aufgerufen werden

Ich habe jetzt eine ganze Menge davon, einige davon kommen hinzulib was als Stapel zufälliger Klassen und Module endet, in die sich einige schleichenapp/models. Ich würde das gerne irgendwie organisieren, aber ich weiß nicht, wo ich anfangen soll.

Sollen nur AR-Modelle rein gehenapp/models? Oder ist es in Ordnung, dort auch Domain- oder Helfer-Modelle zu platzieren? Wie entscheidest du, ob etwas ein Modell ist?

Sollte alles, was nicht passtapp gehen inlib? Oder vielleicht sollte ich ein paar neue benutzerdefinierte Unterverzeichnisse hinzufügenapp? Welche Unterverzeichnisse und wie teile ich die benutzerdefinierten Klassen auf?

Wie gehen Sie in Ihren Projekten damit um? Ich weiß, dass jedes Projekt ein bisschen anders ist, aber es muss Ähnlichkeiten geben.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage