静态方法与BLL中的实例方法

时间:2012-04-30 22:20:11

标签: c#

今天被问到为什么我在asp.net应用程序中使用这样的代码用于我的bll类:

public class StudentBll
{
    public static DataTable GetStudents()
    {
        return DBHelper.ExecuteSp("GetStudents");
    }
    public static DataTable GetStudentById(int studentId) 
    {
        return DBHelper.ExecuteSp("GetStudentById", studentId);
    }
}

而不是

public class StudentBll
{
    public DataTable GetStudents()
    {
        return DBHelper.ExecuteSp("GetStudents");
    }
    public DataTable GetStudentById(int studentId) 
    {
        return DBHelper.ExecuteSp("GetStudentById", studentId);
    }
}

我唯一想到的就是那个

A)表现略有增加(不确定具体细节)

B)可读性  StudentBll.GetStudents();而不是

StudentBll studentBll = new StudentBll();
studentBll.GetStudents();
但是,我对这些答案并不太自信。有人想开导我吗?

2 个答案:

答案 0 :(得分:3)

关于性能,如果您无法显示增加的内容,则它不支持您的声明。人们还可以争辩说,静态方法调用与实例方法调用的性能增益可以忽略不计往返旅行&数据库时间。

您还锁定了您的实施(或者至少强迫消费者做一些难以修改的事情)。如果您丢失了静态方法和代码到接口,不同层级的测试人员和开发人员可以构建模拟,这样他们就不会被迫使用您提供的任何内容。

答案 1 :(得分:2)

当我看到公共静态方法时,可测试性是我想到的第一件事。也忘了oop - 这里没有继承(类和接口),因此你没有类实例。没有继承意味着没有抽象。没有抽象意味着紧密耦合。