문제

그래서 우리는라는 코드 품질 도구를 실행합니다 우리 프로젝트의 일환으로 가끔. 이 도구는 기본적으로 코드 냄새를 찾고보고합니다. 여기서 우리는 키에 액세스하려고 할 때마다 "복제"냄새가 나는 것을 관찰했습니다. params 한 번 이상 (동일한 매개 변수로 메소드-콜을 두 번 만들거나 IF 조건 등을 복제하는 것처럼). 하지만, params 그냥 a Hash, 오른쪽? 키가 두 번 이상 액세스 할 때 다른 해시는 복제 냄새를 겪지 않습니다.

왜 그렇게예요? 무엇인가 params 바로 그거죠? 캐시에 적합합니까? params 로컬 변수에서 사용 하시겠습니까? 도움이 될까요? 아니면 도구에 문제가 있습니까? 돕다!

도움이 되었습니까?

해결책

현재 버전을 사용하면 뷰/모델 폴더에서만 reek 만 실행하는 것이 가장 좋습니다. 뷰 및 컨트롤러에 대한 오 탐지를 제기하기 때문입니다.

매개 변수는 시스템 경계에 가까운 일종의 DTO (데이터 전송 객체)이므로 특성은 일반 코드와 달라야합니다. 그러나 Reek은 그것을 아직 모른다. 나는 가까운 시일 내에 레크를 개선하여 레일로 더 잘 플레이 할 계획입니다. 그러나 지금은 가장 좋은 방법은 앱/모델 (및 앱/도우미 및 lib)을 보는 것으로 제한하는 것입니다.

다른 팁

매개 변수는 a를하는 메소드 호출입니다 @params ||= @request.params

Params가 복잡한 방법이라고 생각할 수도 있으므로 변수로 시도하고 캐시하기를 원하지만, 특히 Rails의 Rails.rb를 기반으로 한 가치가 있다고 생각하지 않습니다.

params[:foo] 메소드 콜입니다 Hash#[], 그래서 Reek이 맞습니다. 나는 Reek에 익숙하지 않으므로 다른 해시 액세스가 왜 동일하게 계산되지 않는지 알 수 없습니다. Hash#[] 코드의 성능에 중요한 부분이 아닌 한 로컬 변수에 저장할 필요가 없을 정도로 빠르야합니다.

Params Hash와 일반 해시의 유일한 차이점은 with_indifferent_access, 문자열이나 기호로 모든 키에 액세스 할 수 있음을 의미합니다.

당신이 params를 호출 할 때마다 메소드 호출을 생성하는 초기화 단계가 있다고 생각합니다. 매개 변수를 만들고 통화 수를 확인할 수 있다고 생각합니다. 이것은 맹목적인 추측 일 수 있습니다. :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top