2009/9/29 Nicolás Sanguinetti <[email protected]>:
> La 1 es la 2 con un sheep coat. Es básicamente una variable global,
> escondida en un método. Es un poco más prolija porque es thread safe,
> pero no deja de ser una variable global.

No estoy tan de acuerdo con que sean lo mismo. Llevado a un extremo,
toda clase no deja de ser una constante global entonces.

User.current tiene varias ventajas frente a $current_user: (1) lazy
loading, (2) está encapsulado en User en lugar de polucionar un
namespace global, (3) como bien decís, es thread safe.

El punto (2) es más que importante: $current_user está expuesto a
cualquier modificación por parte de cualquier fucking línea de código
desde cualquier lado (imaginate si de alguna manera lográs inyectarle
código a algún eval dando vueltas -- si no me equivoco el acceso a
Thread puede limitarse desde código no seguro). User.current no es un
writer, y si existe User.current= es fácil hacer que realice
chequeos...

El caso sigue siendo, que si bien es buenísimo que se pueda evitar,
hay veces que es necesario conocer algo así de contexto desde un model
(en mi caso, tenía un logger que guardaba el id del user actual, y no
quería pasar por parámetro el usuario cada vez que hacía cualquier
cosa).

Pero, tá, tu respuesta me pareció horrible...

-- nachokb
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a