2014-10-27 105 views
-2

首先,我對這個模糊的標題感到抱歉,我很難想出一個明確的標題來描述我的問題。隨意改變你知道更好的標題。如何處理將參數傳遞給調用其他方法的方法?

在我的代碼我經常有這樣的情況:

public class Processor 
{ 
    public void UpdateBatch(List<myType> myTypes, int someId, Foo extra, int barId) 
    {   
     foreeach(var item in myTypes) 
     { 
     if(some condition) 
     { 
      Method(item, someId, extra); 

      // some other actions... 
     } 
     } 
    } 

    private void Method(myType, int someId, Foo extra) 
    { 
     if(string.isNullOrEmpty(myType.Prop) 
     { 
      Create(someId, extra); 
     } 
    } 

    private void Create(int someId, Foo extra) 
    { 
     var some = unitOfWork.Somes.AddObject(new Some { Prop1 = extra.Bar }); 
    } 
} 

我想證明的事情是,我通過所有的參數,每個方法,雖然有些方法並不需要所有的參數,但一些後續方法呢。

我在想你們是怎麼處理這件事的。你是否創建(私有)屬性?或者創建一個新的類來存儲所有的屬性值並傳遞該對象?或者就像上面的代碼一樣?要麼... ?

+0

如果該方法需要將參數傳遞給另一個方法,那麼它*不需要它們。說它不需要它們就是不正確的。 – Servy 2014-10-27 17:46:40

+0

順便說一下,代碼審查(http://codereview.stackexchange.com) – user469104 2014-10-27 17:47:28

+0

也許更好,這段代碼不會編譯...如果你要發佈代碼示例,你應該發佈一個工作。 – 2014-10-27 19:23:06

回答

1

您的陳述不完全準確,但我會盡力回答。

首先,答案是:一個方法不應該接受參數,它什麼也不做。但是,如果Method1調用Method2,並且Method2需要一個Method1無法訪問或生成的參數,那麼它應該通過它的參數傳遞給Method1

應該給變量提供最不需要的範圍。所以,除非我們談論的是一個自然是類(公有或私有)屬性的值,否則您應該堅持將私有實例從方法傳遞給方法。

的選項是,一般爲:

  1. 傳遞值通過方法簽名(給出了至少可達性,這是很好的,而且這是你在做什麼)
  2. 暴露值的變量到所有你的方法作爲類的私有成員(這是很好的,如果它是有道理的)
  3. 從另一個私有方法公開所有方法的值(通常需要如果需要一些處理,或者你想包裝一堆的代碼訪問一些外部資源)

現在,檢查你的語句,你寫:

我傳遞的所有參數每個方法

這是不正確的。您只將UpdateBatch中的4箇中的3個傳遞給Method,然後您只能將這3箇中的2個從Method傳遞到Create

你也狀態:

即使有些方法並不需要所有的參數,但一些後續的方法做

這部分是真實的。

  1. 看看Method的方法。它需要3個參數並使用它們全部,因爲如果myType.Prop爲空或空,它會調用Create,它將接受另外兩個參數。
  2. 看看Create的方法。此方法似乎採用未使用的參數someId。由於此方法不使用someId,因此應將其從參數列表中刪除。一旦你從Create中刪除它,你也可以從Method中刪除它,因爲Method也不會使用它,除非傳遞給Create