3

如果您在模型或控制器中有两个方法,并且您想在方法之间传递一个变量,例如

def foo
  @param = 2
  @test = 1
  callee
  #do something with @test
end

def callee
  @test += @param
end

使用实例变量来执行此操作还是像这样的常规变量更好

def foo
  param = 2
  test = 1
  test = callee(param, test)
  #do something with test
end

def callee(param, test)
  test += param
  test
end

提前致谢!

4

2 回答 2

2

这个问题没有明确的答案,它在很大程度上取决于上下文 - 你需要问的是“哪种方法最能展示代码的意图”。您绝对应该对您正在谈论的模型/控制器类进行测试。

作为一个非常粗略的指导方针:

当方法是类的公共 API 的一部分并且它改变了类实例的内部状态时,第一种方法很常见(尽管如果您像示例中那样链接公共方法,这可能是代码异味的迹象。)这可能会在模型对象中更常见。

第二种方法通常出现在您调用的方法是一个私有的便利方法时,它会排除一些代码重复,或者是一个对参数执行非常特殊的操作并返回一些结果的方法(在这种情况下,它可能应该被分解为实用程序类。)这可以在模型或控制器对象中看到。

如果您的目标是可维护的 OO 代码,那么 SOLID 设计的原则是非常好的指导方针 - 请在此处查看 Bob 大叔关于它们的文章:

http://blog.objectmentor.com/articles/2009/02/12/getting-a-solid-start

于 2012-07-24T08:10:43.313 回答
1

这取决于您的需求。此外,您传递变量的函数的原型也很重要。如果您希望该方法在未经您许可的情况下不更改任何参数,则应使用您的第二个实现。但是,如果您信任该功能,则可以使用第一种方法。这是一个被称为“引用调用”和“值调用”的大话题。您可以查看以下链接;

http://www.exforsys.com/tutorials/c-language/call-by-value-and-call-by-reference.html

于 2012-07-24T07:47:02.813 回答