2009-08-25 4 views

risposta

12

ci sono due principali anti-pattern che ho visto in un sacco di codice Rails:

  1. un sacco di "lavoro pesante" in vista. Qualunque cosa più complicata della semplice iterazione su collezioni o interpolazione di stringhe dovrebbe essere in aiutanti o metodi modello. Non eseguire query per oggetti modello, costruire grandi matrici JSON o aggiornare le variabili di sessione dai modelli ERB.

  2. Oggetti del modello che non sono utilizzabili per lo scripting o l'implementazione dell'API. I tuoi modelli definiscono la semantica del dominio per la tua applicazione. Dovresti essere in grado di attivare script/console, o scrivere wrapper API del servizio, che riutilizzano i metodi del modello funzionale esistenti per manipolare tutti i dati chiave nell'applicazione. La funzionalità del controller è disponibile solo nel ciclo di richiesta/risposta HTTP, che è solo una parte del ciclo di vita di qualsiasi sito completo.

1

Zuppa di alfabeto?

(Nessun tipo dichiarato e senza senso di denominazione variabile che porta a codice quasi illeggibile)

nome del modello deriva da variabili nomi come 'a', 'b', 'c', 'd', etc.

+5

è questo in qualche modo RoR-specifico? – SilentGhost

+0

Non per niente. È qualcosa che ho notato molto di più in Ruby rispetto ad altre lingue (e la maggior parte di ciò che ho visto usare per Ruby è RoR). –

+1

ovviamente non esiste un tipo dichiarato, è un linguaggio dinamico. e chiunque usi una singola lettera come variabile come qualcosa di diverso da un iteratore in qualsiasi lingua ha bisogno di qualcosa di duro lanciato contro di loro –

14

Non imparare Rubino.

+0

Heh, non posso credere di aver ottenuto un upvote per questo :-) –

+0

È una risposta intelligente :) – lucapette

2

UTILIZZO se non con il resto

antipattern:

unless is_the_weekend? 
    do stuff that you do during the week 
else 
    do stuff that you do on weekends 
end 

Alternativa:

if is_the_weekend? 
    do stuff that you do on weekends 
else 
    do stuff that you do during the week 
end