【发布时间】:2011-10-28 02:37:55
【问题描述】:
今天,试图干掉一些代码,我提取了一些重复的 File.exists?多个辅助方法使用的代码转换为私有方法
def template_exists?(*template) 并意外修补了这个已经存在的 Rails 辅助方法。这是代码异味的一个非常明显的指标,我不需要任何继承的方法,但我继承了它们。此外,我重构的方法在这个助手中做了什么?
所以,这个助手做得太多,因此违反了 SRP(单一责任原则)。我觉得 Rails 助手本质上很难保留在 SRP 中。我正在查看的助手是其他助手的超类助手,它本身就有 300 多行。它是一个非常复杂的表单的一部分,使用 javascript 来掌握交互流程。 fat helper 中的方法短小精悍,所以没有那么糟糕,但毫无疑问,它需要关注点分离。
我应该怎么去?
- 将方法分成多个助手?
- 将辅助方法中的代码提取到类中并委托给它们?您会确定这些类的范围(即 Mydomain::TemplateFinder)吗?
- 将逻辑分成模块并将它们列为包含在顶部?
- 其他方法?
正如我所见,没有 2 更安全 wrt 意外的猴子补丁。也许是一个组合?
感谢代码示例和强烈的意见!
【问题讨论】:
标签: ruby-on-rails ruby single-responsibility-principle