default_scope is evil?

4 views
Skip to first unread message

Paulo Moura

unread,
Jan 16, 2015, 3:23:55 PM1/16/15
to gur...@googlegroups.com

caike

unread,
Jan 16, 2015, 3:57:43 PM1/16/15
to gur...@googlegroups.com
Concordo! Procuro evitar default scopes por motivos como esses, e também porque vejo como quebra do Principle of Least Astonishment 

--
You received this message because you are subscribed to the Google Groups "guru-pa" group.
To unsubscribe from this group and stop receiving emails from it, send an email to guru-pa+u...@googlegroups.com.
To post to this group, send email to gur...@googlegroups.com.
Visit this group at http://groups.google.com/group/guru-pa.
For more options, visit https://groups.google.com/d/optout.



--
Regards,
- Carlos

Fábio Miranda

unread,
Jan 16, 2015, 7:58:59 PM1/16/15
to gur...@googlegroups.com
Não sigo como dogma. Como tudo, depende do contexto e do problema.

Por exemplo, para modelos que possuem uma ordenação natural, e que raramente faz sentido exibi-los fora dessa ordem. É um default_scope que considero importante, uma regra de negócio que não vale a pena ser ignorada. 

O custo de não ter o default_scope nesses cenários é sair tacando "Model.scope" pra tudo quanto é canto, ferindo outro princípio bastante norteador que é o DRY.

Sobre a justifica (1), "you can't override", é tão trivial perceber que tem um escopo default (no log de desenvolvimento / no arquivo do modelo), para aplicar #unscoped **quando** for o caso, que considero responsabilidade do desenvolvedor conhecer o framework que está trabalhando e ter a sacada quando isso acontece.

A justificativa 2 é muito boa, porém tb capturável facilmente quando o projeto está devidamente cauçado por uma suite de testes. Se o projeto não tem testes que tratem isso e ajudem a corrigir colaterals, a culpa não é do scope, definitivamente.

"Don't use anymore" é um exagero. 

Grandes poderes trazem grandes responsabilidades, já dizia tio Ben...

abs!

Fábio Luiz Nery de Miranda
Software Engineer
@fabiolnm

Felipe Iketani

unread,
Jan 16, 2015, 8:44:34 PM1/16/15
to gur...@googlegroups.com
eu uso default scope mais para ordenar por data (por exemplo)

nunca usei com outro objetivo, e nunca tive mts problemas

caike

unread,
Jan 21, 2015, 3:46:53 PM1/21/15
to gur...@googlegroups.com
Ah! Vale lembrar também que as novas features de caching do ActiveRecord no Rails 4.2 (AdequateRecord) não funcionam caso o model tenha default_scope

http://guides.rubyonrails.org/4_2_release_notes.html#adequate-record


"Caching is not used in the following scenarios:

  • The model has a default scope
  • The model uses single table inheritance
  • find with a list of ids, e.g.:"
Reply all
Reply to author
Forward
0 new messages