我目前正在为我正在构建的Web应用程序进行类设计。我对OOP比较陌生(虽然我做过一些)。在大多数情况下,我非常有信心,我知道我在范例中做了什么:我知道一个类访问另一个类的内部工作并不好,不安全的静态方法是不安全的,因为它们可以修改全局状态,一般来说,更纯粹的功能和模块化我可以保持我的代码越好。
我有点不确定在这种情况下该怎么做。我有多个网页都有自己的GridView控件。某些逻辑将遍历每一行并根据特定条件更改行的颜色。例如,保留一个封装这些样式更改的静态类会被视为不好的做法吗?每个页面都会访问这些更改?从技术上讲,这意味着该类将修改另一个类的成员。我该怎么办呢?我宁愿不通过每个类复制我的代码,因为我尽可能地遵守DRY原则。
编辑:这就是我的想法。public static class RowStyle
{
public static void SetRed(GridViewRow row)
{
row.BackColor = Color.Red;
}
// More methods here
}
每个页面都会将许多GridViewRows传递给这个类,然后对它们进行修改。
答案 0 :(得分: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.
}
}
答案 1 :(得分:0)
我建议创建一个包含GridView的自定义UserControl,并在那里添加所有相关逻辑。这是在ASP.NET平台中执行此操作的最佳方式。
答案 2 :(得分:0)
如果您将遵循相同的颜色代码,则可以按照以下步骤操作:
创建一个公共类。让它静止。
创建一个方法,因为它将在rowdatabound事件中调用,并根据事件可以更改颜色
答案 3 :(得分:0)
我认为使用这样的方法创建静态类会很好:
public static System.Drawing.Color GetRowColor(GridRow row)
...
如果控制颜色值的规则是全局的,那么这是正确的。
答案 4 :(得分:0)
我会将样式更改封装在一个地方(web.config将是我的选择),并创建一个将GridView实例作为参数的辅助方法。该辅助方法的唯一目的是从配置文件中读取样式信息,将其应用于传递的GridView实例。
任何包含应该应用这些样式更改的GridView的页面都会调用辅助方法。