2012-04-30 73 views
1

实例方法今天问我为什么在一个asp.net应用程序中使用这样的代码为我BLL类:静态方法VS在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 studentBll = new StudentBll(); 
studentBll.GetStudents(); 

我是不是在这些问题的答案过于自信,但是。任何人都在照顾我?

+0

'StudentBll'是否也有静态成员? –

+0

@TimSchmelter - 它只包含公共静态方法。 –

+0

BLL代表什么? – payo

回答

3

就绩效而言,如果您无法显示增加额是多少,那么它就不支持您的索赔。人们也可以争辩说,静态方法调用与实例方法调用相比,性能增益对​​数据库时间的往返行程的性能增益可以忽略不计。

你也锁定了你的实现(或者至少迫使消费者做一些难以修改的东西)。如果你失去了接口的静态方法和代码,不同层次的测试人员和开发人员可能会构建模拟,因此他们不会被迫使用你提供的任何东西。

+0

奥斯汀 - 真的,这不是为测试而设计的,因为在这种情况下所有测试都是与sprocs进行集成测试。不过,我看到你的观点。 –

2

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