簡體   English   中英

Java樣式/最佳實踐 - 將字段傳遞給方法直接訪問

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM