![](/img/trans.png)
[英]Passing instance variables to instance methods vs. directly accessing them?
[英]Java Style / Best Practice - passing fields to methods vs accessing directly
在Java中,給出以下類:
public class MyClass {
private final Dependency dependency;
public MyClass(Dependency dependency)
{
this.dependency = dependency;
}
public void doWork()
{
// validate dependency...
}
doWork方法需要調用使用dependency
的方法。
以下哪兩種變體被認為是“最佳實踐”,為什么?
// Access dependency directly
void validateDependency()
{
this.dependency.something();
}
// access dependency as passed to the method
void validateDependency(Dependency dependency)
{
dependency.something();
}
我發現自己偏愛后者,將依賴項直接傳遞給方法,因為它使得該方法更容易單獨測試(雖然是邊緣)。
但是,我對這里的java約定/最佳實踐很感興趣。
存在一個類,因為您具有與該狀態耦合的狀態和操作。 將該狀態的一部分作為參數傳遞給類方法是沒有充分理由的。
事實上,它會向我表明,這片國家不應該屬於這個階級。 或者該方法不屬於該類。
使用參數“以便更容易進行單元測試”是后者保持的一個很好的指示(該方法不應該在類中)。
好吧,在你的例子中,你要求函數用Dependency做一些事情,它適用於靜態函數,而不是成員函數。
我的經驗法則是: 在擁有成員的對象上調用方法時直接使用成員,但在執行/測試與依賴項直接相關的內容時傳遞引用,並為后者支持靜態方法
有點冗長,但我希望它有所幫助。 一如既往地嘗試“做正確的事情”和差異,這個小的不會對代碼的維護或可讀性產生巨大影響。
沒有正確的方法來做到這一點。 我更喜歡把變量放在那里。
依賴注入。 第二種選擇是“最好的”。
如果將“Dependency”類設置為接口,則會使代碼更加模塊化,更易於測試,更少耦合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.