2012-07-24 101 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