Si almacenamos en caché los parámetros en una var local en una acción, ¿ayudará o será lo mismo?

StackOverflow https://stackoverflow.com/questions/1164472

Pregunta

Entonces ejecutamos una herramienta de calidad de código llamada hedor de vez en cuando como parte de nuestro proyecto.Básicamente, la herramienta busca olores de código y los informa.Aquí, observamos que huele a "Duplicación" cada vez que intentamos acceder a una clave en params más de una vez (como si estuviéramos haciendo una llamada a un método dos veces con los mismos parámetros o estuviéramos duplicando una condición if, etc.).Sin embargo, params es solo un Hash, ¿bien?Otros hashes no huelen a duplicación cuando se accede a sus claves más de una vez.

¿Por qué esto es tan?Cuáles son params ¿exactamente?¿Tiene sentido almacenar en caché? params en una variable local entonces usarlos?¿Ayudará o es lo mismo?¿O hay algún problema con la herramienta?¡Ayuda!

¿Fue útil?

Solución

Con la versión actual, es mejor ejecutar Reek solo en su carpeta de aplicaciones/modelos, porque genera falsos positivos contra vistas y controladores.

params es una especie de DTO (objeto de transferencia de datos) cercano a los límites del sistema, por lo que sus características deben ser diferentes a las del código normal.Pero Reek no lo sabe (todavía).Planeo mejorar Reek en un futuro próximo para que funcione mejor con Rails.Sin embargo, por ahora, lo mejor que puede hacer es restringirlo a mirar aplicaciones/modelos (y tal vez aplicaciones/ayudantes y lib).

Otros consejos

params es una llamada a un método que hace un @params ||= @request.params

Puede ser que se cree params es un método complicado, por lo que quiere usted para tratar de almacenar en caché en una variable, pero, no creo que valdría la pena sobre todo porque se memoized (basado en mi rack_process.rb de carriles 2,2)

params[:foo] es un método de llamada a Hash#[], por lo que los listones es correcto. No estoy familiarizado con el olor, así que no puedo decir por qué otros accesos Hash no se les contaron lo mismo. Hash#[] debe ser lo suficientemente rápido que no es necesario almacenarlo en una variable local a menos que esté en una actuación parte crítica muy de su código.

La única diferencia entre el hash params y una Hash normal es que utiliza with_indifferent_access, lo que significa que puede acceder a cualquier llave con una cadena o un símbolo.

Creo que cada vez que se llama params, hay una etapa de inicialización que genera llamadas a métodos, supongo que se puede intentar crear un params y comprobando el número de llamadas. esto podría ser conjetura ciega. : -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top