2012-07-24 96 views
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 

提前感谢!

回答

2

没有一个明确的回答这个问题,这取决于上下文很多 - 你需要问的是“哪种方法最演示代码的意图”。你一定要对你正在谈论的模型/控制器类进行测试。

作为一个非常粗略的指南:

第一种方法是常见的,当方法是类的公共API的一部分,它改变了类的实例的内部状态(尽管它可能是一个符号如果您的示例中链接了公共方法,则会出现代码异味)。这可能会在模型对象中更频繁地出现。

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

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

1

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

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

+0

这是红宝石,不C:这里看看Bob大叔的文章对他们 -

如果你瞄准了维护的面向对象的代码,然后SOLID设计原则是非常好的指南不存在引用/按值调用的调用 – 2012-07-24 08:41:50