2012-03-28 10 views
7

Recentemente ho avuto una discussione con un mio amico che è anche uno sviluppatore di RoR. Abbiamo discusso su come i modelli di Rails dovrebbero essere gestiti. Personalmente mi piace lasciare nello spazio dei nomi predefinito solo i modelli root (ad es. Utente, Articolo, Bill ecc.) Ei modelli dipendenti vanno a un modulo (es. Utente :: Profilo, Utente :: Attività) con il nome della radice modello a cui sono associati.Modelli di nomi in un'applicazione Rails

D'altra parte, ho visto molti progetti che avevano come 100 modelli nello spazio dei nomi predefinito chiamati user_profile, user_activity e così via. A giudicare dallo sviluppo di Java (Spring), la comunità java tende ad organizzare classi nei pacchetti e a raggrupparli in modo logico, cosa che trovo molto allettante.

Quindi la domanda è: c'è qualche inconveniente nel raggruppare i modelli nei moduli (eccetto l'extra: nome_classe nella definizione di relazione) e ci sono motivi specifici per cui le persone di solito non lo fanno?

risposta

4

Sebbene lo spazio dei nomi abbia i suoi vantaggi, è necessario aggiungere eccezioni a tutti i modelli. Foo :: Bar presume il nome di una tabella di bars e allo stesso modo bar_id per le associazioni, mentre è preferibile utilizzare foo_bars e foo_bar_id.

Se ci si sente fortemente in questo, si potrebbe voler vedere se c'è un componente aggiuntivo che risolve questo per voi, o implementare la propria estensione che lo fa.

L'unico caso in cui ho utilizzato spazi dei nomi è per i componenti aggiuntivi che devono essere utilizzati in applicazioni di terze parti in cui non voglio rivendicare nomi di modelli a livello di root come sarebbe fastidioso. Lo sforzo extra in questo caso vale la pena.

Se vi preoccupate di vedere oltre 100 file di modelli senza alcun raggruppamento, probabilmente sarete ugualmente infastiditi vedendo 100+ tabelle senza raggruppamento, e generalmente non è possibile correggerle.

I controllori si prestano a raggruppare in modo abbastanza naturale, ma i modelli non sono facilmente accessibili, almeno non con ActiveRecord di serie.

+2

Non riesco a ricordare l'ultima volta che ho aperto il database explorer. Con il rubino viene naturale astrarre tali cose. Per quanto mi ricordo, Foo :: Bar genererà una tabella "foo_bar". L'unico inconveniente è che devi specificare a: class_name => Foo :: Bar in associazioni. Mi chiedo come un'applicazione di rota sia in grado di gestire un'applicazione complessa se incoraggia a mantenere tutti i modelli in una directory. Voglio dire, se l'app cresce troppo, il namespace è una parte del refactoring necessario o uno passa semplicemente a Java?) – FreeCandies

+6

Di solito prendo l'approccio di usare il prefisso come una sorta di spazio dei nomi, così crei cose come UserProfile e UserActivity invece di profilo o attività. Questo porta a un tipo naturale di raggruppamento nell'elenco. È raro vedere un'applicazione con oltre 500 modelli che trarrebbe un vantaggio significativo dal namespace. Complicato è complicato. A volte è meglio essere onesti su quanto sia complessa la tua applicazione che provare e fingere che sia in realtà semplice seppellire la complessità e rendere più difficile trovare le cose. – tadman