Frage

Die RoR-Tutorials postulieren ein Modell pro Tabelle für die ORM zu arbeiten. Mein DB-Schema hat einige 70 Tabellen aufgeteilt konzeptionell in 5 Gruppen von Funktionalität (ZB jede gegebene Tabelle lebt in einer und nur einer funktionellen Gruppe, und die Beziehungen zwischen den Tabellen der verschiedenen Gruppen werden minimiert.) Also: sollte ich ein Modell entwerfen pro konzeptionelle Gruppe oder sollte ich einfach 70 Rails-Modelle und lassen Sie die Gruppierung ‚konzeptionellen‘? Dank!

War es hilfreich?

Lösung

Ich behandle dies in einem meiner großen Apps nur dafür sorgen, dass die Tabellen / Modelle konzeptionell nach Namen gruppiert sind (mit fast 1: 1 Tisch-Modell-Beziehung). Beispiel:

events
event_types
event_groups
event_attendees
etc...

Auf diese Weise, wenn ich mit Textmate oder was auch immer, werden die Modelldateien gut zusammen sortiert nach dem Alpha gruppiert. Ich habe 80 Modelle in dieser App, und es funktioniert gut genug, um die Dinge im Griff zu behalten.

Andere Tipps

Wahrscheinlich sollten Sie 70 Modelle haben. Sie könnten die Modelle Namespace 5 Namensraum zu haben, eine für jede Gruppe, aber das kann mehr Ärger als es wert ist. Wahrscheinlicher ist, haben Sie überall in jeder Gruppe eine gemeinsame Funktionalität. In diesem Fall würde ich ein Modul für jede Gruppe machen sein Verhalten enthält, und beinhalte, dass in jedem relevanten Modell. Auch wenn es keine gemeinsame Funktionalität ist, können Sie schnell ein Modell für seine konzeptuelle Gruppe abfragen Dadurch lassen.

Sie sollten auf jeden Fall ein Modell pro Tabelle, um den Vorteil zu nehmen Nutzung aller Active Magie.

Aber man könnte auch Gruppe Ihre Modelle zusammen in Namespaces mit Modulen und Unterverzeichnissen, um zu vermeiden, 70 Dateien in Ihren Modellen Verzeichnis zu verwalten.

Zum Beispiel könnten Sie haben:

app/models/admin/user.rb
app/models/admin/group.rb

für Modelle Admin :: User und Admin :: Group, und

app/models/publishing/article.rb
app/models/publishing/comment.rb

für Publishing :: Artikel und Verlag :: Kommentar

Und so weiter ...

Ohne weitere Einzelheiten über die Art der siebzig Tabellen und ihre konzeptionellen Beziehungen zu wissen, ist es nicht wirklich möglich, eine gute Antwort zu geben. Sind diese Legacy-Tabellen oder haben Sie entwickelt diese von Grund auf neu?

Sind die Tabellen durch eine Art von Vererbungsmuster bezogen oder sie sein könnte? Rails kann eine begrenzte Form der Vererbung tun. Look up Single Table Inheritance (STI).

Persönlich würde ich viel Mühe gegeben, zu vermeiden mit siebzig Tabellen arbeiten, nur weil das eine Menge Arbeit ist - siebzig Models & Controller und ihre 4+ Ansichten, Helfer, Layouts und Tests nicht die Speicherauslastung zu erwähnen Ausgabe des Design in ind zu halten. Es sei denn natürlich wurde ich von der Stunde bezahlt und gut genug für die Wiederholung zu kompensieren.

Bevor in einem machen 70 Modelle Springen, beachten Sie bitte diese Frage, um zu entscheiden:

Würde jedes Ihrer Tabellen ein „Objekt“, zum Beispiel in Betracht gezogen wird ein „Auto“ Tisch oder sind nur einige der Tabellen nur Beziehungsinformationen halten, wird alle Fremdschlüsselspalten zum Beispiel?

In Rails nur die „Objekt“ Tabellen werden Modelle! (Mit einigen Ausnahmen für bestimmte Arten von Verbänden) So ist es sehr wahrscheinlich, dass, wenn Sie nur 5 Gruppen von Funktionalität haben, können Sie nicht mehr als 70 Modelle haben könnten. Auch, wenn die Gruppen von Funktionen, die Sie ganz anders erwähnt sind, können sie auch am besten in ihrem eigenen App geeignet sein.

Es kann eine kleine Anzahl von Fällen, in denen Sie die Schienen Standard Single-Table-Vererbungsmodell verwenden können. Vielleicht alle Klassen in einer bestimmten funktionellen Gruppierung haben die gleichen Felder (oder fast alle gleich). In diesem Fall nutzt die Trockenheit STI Angebote. Wenn es nicht sinnvoll, obwohl, verwendet Klasse-per-Tabelle.

In der Klasse-per-Tabelle Version können Sie nicht einfach eine gemeinsame Funktionalität in einer Basisklasse ziehen. Stattdessen ziehen sie in ein Modul. Eine Hierarchie wie die folgende könnte sich als nützlich erweisen:

app/models/admin/base.rb - module Admin::Base, included by all other Admin::xxx
app/models/admin/user.rb - class Admin::User, includes Admin::Base
app/models/admin/group.rb - class Admin::Group, includes Admin::Base

Es ist bereits erwähnt, ist es schwer, anständig Ratschläge zu geben, ohne Ihr Datenbank-Schema usw. zu wissen, aber ich würde zuneigen die 70+ Modelle zu schaffen, (eine für jede Ihrer Tabellen.)

Unter Umständen können Sie weg mit etwas Modell Notwasserung, aber für die Kosten (negliable) auch Sie können sie dort haben.

Sie brauchen nicht einen Controller + Ansichten für jedes Modell zu erstellen (wie durch srboisvert answerd). Sie brauchen nur einen Controller für jede Ressource (was ich erwarten würde viel weniger als 70 sein - wahrscheinlich nur 10 oder 15 oder so von Ihrer Beschreibung zu urteilen).

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