2011-08-23 59 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方法。