2012-04-30 97 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 - 這裏沒有繼承(包括類和接口),因此你沒有類實例。沒有繼承意味着沒有抽象。沒有抽象意味着緊密耦合。