2010-09-16 70 views
0

實現方法調用的最佳/好方法是什麼?定義方法的好方法

例如:從下面通常被認爲是最佳實踐。如果兩者都不好,那麼認爲是最佳實踐。

選項1:

private void BtnPostUpdate_Click(object sender, EventArgs e) 
    { 
     getValue(); 
    } 

    private void getValue() 
    { 
     String FileName = TbxFileName.Text; 
     int PageNo = Convert.ToInt32(TbxPageNo.Text); 

     // get value from Business Layer 
     DataTable l_dtbl = m_BLL.getValue(FileName, PageNo); 

     if (l_dtbl.Rows.Count == 1) 
     { 
      TbxValue.Text = Convert.ToInt32(l_dtbl.Rows[0]["Value"]); 
     } 
     else 
     { 
      TbxValue.Text = 0; 
     } 
    } 

選項2:

private void BtnPostUpdate_Click(object sender, EventArgs e) 
    { 
     String FileName = TbxFileName.Text; 
     int PageNo = Convert.ToInt32(TbxPageNo.Text); 

     int Value = getValue(FileName, PageNo); 

     TbxValue.Text = Value.ToString(); 

    } 

    private int getValue(string FileName, int PageNo) 
    { 
     // get value from Business Layer 
     DataTable l_dtbl = m_BLL.getValue(FileName, PageNo); 

     if (l_dtbl.Rows.Count == 1) 
     { 
      return Convert.ToInt32(l_dtbl.Rows[0]["Value"]); 
     } 
     return 0; 
    } 

我明白,我們可以傳遞參數的情況下直接分配到一個局部變量...我的問題更多的是方法定義和它處理的方式。

+0

這是來自winforms ...但這個問題也可以考慮在其他應用程序類型... – 2010-09-16 06:05:57

+0

你真的應該看看C#的命名約定 - 它會讓你的代碼更具可讀性 – 2010-09-16 08:24:22

回答

6

如果您自動訂閱事件,我認爲使用事件處理程序簽名的方法並不會特別糟糕,該方法只是委託給具有您需要的「真實」簽名的方法(在這種情況下,沒有參數)。

如果手動訂閱,您可以使用lambda表達式來代替:

postUpdateButton.Click += (sender, args) => PostUpdate(); 

然後做工作PostUpdate。無論你將PostUpdate分成兩種方法,一種處理UI交互,一種處理BLL交互取決於你。在這種情況下,我認爲這不重要。

但是,如何構造UI邏輯以使其可測試是一個完全不同的問題。我最近成爲MVVM模式的粉絲,但我不知道你的特定場景會如何適用(它實際上是圍繞着Silverlight和WPF設計的)。

一對夫婦的其他意見,但:

  • 按照慣例,參數應遵循駝峯格式,不PascalCased
  • 你真的相信你從前綴局部變量與l_得到好處?他們當地人不是很明顯嗎?就我個人而言,我並不熱衷於這裏顯示的大部分變量名稱 - 考慮在其含義而不是它們的類型之後命名變量。
  • 使用DataTable來返回信息是一種有點容易出錯的做事方式。爲什麼BLL不能返回int?來表示價值(或缺乏價值)?
+0

感謝您的回覆,建議和意見 – 2010-09-16 08:00:19

0

根據你的例子,選項2是要走的路。選項1瞭解您的表格以及如何在其上顯示數據,這違反了SRP

+0

是的,但是如果按鈕事件與文本框交互?我想也許增加一個屬性,反過來設置文本框可能會被要求。那麼爲什麼不實施mvc? – griegs 2010-09-16 06:00:55

+0

嗯,在我看來,控件是(也可以是)在簡單的單一winforms應用程序中輕鬆地耦合在一起。最後,歸結爲應用程序的複雜程度以及您需要的分離程度。 – alexn 2010-09-16 06:01:49

+0

其中的問題在於簡單的winforms,但OP沒有提到winforms,事件看起來像是webforms – griegs 2010-09-16 06:02:55

1

這裏是我喜歡的,如果我不實施mvc。我假設網絡在這裏。

我會先做選項2,但不是讓按鈕代碼設置文本ID創建一個屬性來設置文本框的值。

我這樣做,因爲如果別的東西設置文本框值,那麼你要重複代碼。如果你改變一個名字或者控制類型就不好。

+0

你想讓我在每個TextBox的Form 1中創建15個Properties。其他控件的情況如何? – 2010-09-16 06:13:54

+0

我只是說我永遠不會有一個按鈕甚至更新文本框。是的,我可能會添加15個屬性。特別是如果我在發佈前按摩數據 – griegs 2010-09-16 06:19:23