2011-08-23 92 views
0

我目前正在爲我正在構建的Web應用程序的類設計工作。我對OOP比較陌生(儘管我已經做了一些)。大多數情況下,我相當確信我知道我在範式中做了什麼:我知道,一個類訪問另一個類的內部運作並不是好習慣,不安全的靜態方法是不安全的,因爲它們可以修改全局狀態,一般來說,更純粹的功能和模塊化我可以保持我的代碼更好,我會。C Sharp/ASP.NET:OOP Good Practice問題

雖然我有點不確定該怎麼做。我有多個網頁,都有自己的GridView控件。一些邏輯會遍歷每行,並根據特定條件更改行的顏色。例如,是否將其視爲不好的做法,例如,保留一個封裝這些樣式更改的靜態類,這些更改將由每個頁面訪問?從技術上講,這意味着這個類將會修改另一個類的成員。我應該怎麼做呢?我希望不要通過每個類複製我的代碼,因爲我儘可能地遵守DRY原則。

編輯:這就是我在想什麼。

public static class RowStyle 
{ 
    public static void SetRed(GridViewRow row) 
    { 
     row.BackColor = Color.Red; 
    } 

    // More methods here 
} 

並且每個頁面都會將許多GridViewRows傳遞給這個類,然後讓它們被修改。

回答

2

一般來說,如果靜態方法不修改靜態,靜態方法並不是一個大問題。因此,只要它需要的東西要麼封裝在方法中,要麼通過參數傳入,那麼問題就更少了。

例如,下面的例子,下面將IMO被罰款

public static class Colorizer 
{ 
    public static void Colorize(GridView gv) 
    { 
     // do you're funky logic here. 
    } 
} 

和使用的每個頁面都需要邏輯的那個方法。

然而,這將是很壞很壞的壞:

public static class Colorizer 
{ 
    private static bool haveIAlreadyColorized = false; 
    public static void Colorize(GridView gv) 
    { 
     if(!haveIAlreadyColorized) 
      // do you're funky logic here. 
    } 
} 
+0

我同意這一點。如果你看看我的編輯,你覺得這有意義嗎? –

0

我建議創建一個包含你的GridView的自定義用戶控件,並添加所有相關的邏輯在那裏。這是在ASP.NET平臺內完成的最好方法。

0

如果相同的顏色代碼,你會遵循的話,你可以按照這個:

  1. 創建一個通用類。使其靜態。

  2. 創建一個方法,將在RowDataBound事件被調用,並根據事件中,你可以改變顏色

0

我認爲這將是罰款,有一個靜態類,這樣的方法:

public static System.Drawing.Color GetRowColor(GridRow row) 
... 

如果規則控制顏色的值是全局的,那麼這是正確的。

+0

Jamiec的方法類似,也適合我。 –

0

我會將樣式更改封裝在一個地方(web.config將是我的選擇),並創建一個以GridView實例爲參數的幫助器方法。該輔助方法在生活中的唯一目的是從配置文件讀取樣式信息,將其應用於傳遞的GridView實例。

任何包含應該應用這些樣式更改的GridView的頁面都會調用helper方法。