0

我们有一个 Basewebpage 类,它有许多常用功能,如填充下拉列表、格式化、返回格式化数据表等。

什么是好的方法。

Public Class BaseWebPage
{
 ...

    public static DataTable Static_GetPersonDataTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Name");
        dt.Columns.Add("Age");

        return dt;
    }
  ...
    public DataTable NonStatic_GetPersonDataTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Name");
        dt.Columns.Add("Age");

        return dt;
    }
}

这就是两者都可以调用的方式

DataTable dt1 = BaseWebPage.Static_GetPersonDataTable();  // calling static method
...
BaseWebPage pageBase = new BaseWebPage();
DataTable dt2 = pageBase.NonStatic_GetPersonDataTable();  // calling non-static method

上述场景中的几个问题

  • 两种方法都会返回数据表的新实例还是静态方法总是返回相同的?
  • 在重负载(许多请求)情况下,是否会有任何与线程相关的问题?
  • 如果没有副作用,哪个比其他更好?为什么?

如果你能写一点描述性的东西,那将非常有帮助。

4

2 回答 2

1

• 两种方法都会返回数据表的新实例还是静态方法总是返回相同的?

是的,他们将返回一个新实例。

•在重负载(许多请求)的情况下,这些中的任何一个是否会出现与线程相关的问题?

不,除非您在方法中使用共享状态。目前他们没有,但他们可能会。甚至实例方法也可以使用共享状态。这与静态无关(静态?)

• 如果没有副作用,哪一个比其他更可取?为什么?

这并不重要,但我会去实例方法。在某些时候,您可能想要添加测试,您可以提取接口中的方法并模拟对象。

加分项:DataTables 糟透了!避免使用它们并使用类/对象。

于 2012-08-22T07:12:20.787 回答
1

就我个人而言,我会让你所有的页面成为这个 baseWebPage 的子类。
您可以安全地访问所有方法,而无需实例化 BaseWebPage 类,甚至无需输入名称(当变为静态时)。

代码如下所示:
所有网页(假设您使用的是 webforms 而不是 mvc):

public partial class Index : BaseWebPage{
    protected void Page_Load(object sender, EventArgs e){
        var data = GetPersonDataTable();
    }
}

您的 baseWebPage :

Public Class BaseWebPage : System.Web.UI.Page{
    protected DataTable GetPersonDataTable(){
        //Do your thing
    }
}

关于安全性和行为:这取决于您如何在这些方法中编写代码。
但是在静态和非静态中,您可以安全地让多线程返回 DataTable 的多个不同实例。
但是,如果有意,您也可以每次都返回相同的实例。这取决于您使用的代码和资源。

于 2012-08-22T07:32:56.223 回答