Domanda

Quindi corriamo uno strumento di qualità codice chiamato fetore di tanto in tanto come parte del nostro progetto. Lo strumento sembra fondamentalmente per il codice odori e li riporta. Qui, abbiamo osservato che otteniamo odore "duplicazione" ogni volta che cerchiamo di accedere a una chiave in params più di una volta (come se stiamo facendo un metodo di chiamata due volte con gli stessi parametri o stiamo duplicando se la condizione, ecc). Tuttavia, params è solo un Hash, giusto? Altri hash non ottengono odore duplicazione quando le chiavi sono accessibili più di una volta.

Perché è così? Quali sono params esattamente? Ha senso mettere in cache params in una variabile locale poi usarli? Aiuterà o il suo stesso? O c'è qualcosa che non va con lo strumento? Aiuto!

È stato utile?

Soluzione

Con la versione corrente è meglio correre Reek solo sulla cartella app / modelli, perché solleva i falsi positivi contro le opinioni e controller.

params è una sorta di DTO (oggetto di trasferimento dati) vicino al limite del sistema, e quindi le sue caratteristiche devono essere diversi rispetto al codice normale. Ma Reek non sa che (ancora). Ho intenzione di migliorare Reek in un prossimo futuro, in modo che gioca meglio con Rails. Per il momento, però, la soluzione migliore è quella di limitare a guardare app / modelli (e forse app / aiutanti e lib).

Altri suggerimenti

params è una chiamata di metodo che fa un @params ||= @request.params

Potrebbe essere che pensa params è un metodo complicato, in modo che vi vuole per cercare di memorizzare nella cache in una variabile, ma, non credo che sarebbe valsa la pena soprattutto perché è memoized (basato sulla mia rack_process.rb da Rails 2.2)

params[:foo] è un metodo-chiamata a Hash#[], così fetore è corretto. Non ho familiarità con odore, quindi non posso dire perché altri accessi hash non vengono contati lo stesso. Hash#[] dovrebbe essere abbastanza veloce che non c'è bisogno di memorizzarlo in una variabile locale meno che non siate in una performance parte molto critica del codice.

L'unica differenza tra l'hash params e un hash regolare è che usa with_indifferent_access, significa che è possibile accedere a qualsiasi chiave con una stringa o un simbolo.

Credo che ogni volta che si chiama params, c'è una fase di inizializzazione che genera chiamate di metodo, suppongo che si può provare a creare un params e il numero di chiamate controllo. questo potrebbe essere indovinare cieco. : -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top