2

我正在学习 Michael Hartl 的 Rails 课程,在第 4 章,我的函数 full_title 如下:

app/helpers/application_helper.rb

module ApplicationHelper
  def full_title page_title = ""
    base_title = t "app_name"
    page_title.empty? ? base_title : page_title + " | " + base_title
  end
end

运行 reek(一个代码审查工具),我得到一个警告:

app/helpers/application_helper.rb -- 1 warning:
  [4, 4]:FeatureEnvy: ApplicationHelper#full_title refers to 'page_title' more than self (maybe move it to another class?) [https://github.com/troessner/reek/blob/master/docs/Feature-Envy.md]

那么什么是 FeatureEnvy 以及在这种情况下如何解决它?

4

1 回答 1

2

reek文档解释了feature envy如下:

当代码片段引用另一个对象的频率高于它引用自身时,或者当多个客户端对特定类型的对象执行相同系列的操作时,就会发生特性嫉妒。

在这种特殊情况下,我相信这个问题可以忽略不计。辅助方法很自然地接受参数并对其进行操作,而不是引用self,在这种情况下,它是视图对象。

如何从 reek 的分析中排除助手:

您应该能够通过将其添加到config.reek文件中来排除所有助手是否符合“功能嫉妒”规则:

"app/helpers":
  FeatureEnvy:
    enabled: false
于 2017-07-11T16:05:57.567 回答