2010-02-25 58 views
1

我正在一個有三層實現的asp.net項目。 DataAccess層就在那裏.DataAccessContract是一個包含數據訪問層中所有類實現的接口的層。類似地,我們有一個業務層和一個businessLayer協定。直接實例化類或通過控制接口實例化它之間的區別#

現在,當我們調用數據訪問,從業務層,我們稱之爲

IUserDAL userControllerDAL=new UserDAL(); 

UserDAL是內部數據訪問和IUserDAL裏面DataAccessContract。

我可以做這種方式

UserDAL user=new UserDAL(); 

的是這兩種方法以及如何第一個比第二好之間的差異。這是第一種情況下的一些模式。請用一些例子來解釋。

回答

2

該對象以完全相同的方式實例化,但是您可以從該對象訪問的內容是不同的。通常,界面提供的功能較少,如果您不希望開發人員執行某些操作,這可能是件好事。或者對於只能通過接口訪問的對象中的某些方法,可能會有明確的聲明。

+0

方法調度也考慮到了這一點。 即 void Do(IUserDAL u) void Do(UserDAL u) – 2010-02-25 07:23:55

0

目的是分離的實現(實現該接口的類)合同(接口您正在使用)。

假設你想實現一個結果隨機化DAL(只是爲了它)。如果選擇1,則需要從DAL繼承,或者修改所有使用DAL的位置。

繼承是有問題的:DAL實現可能被封,你可能想從別的繼承等

在第二種情況下,你讓你的類的獨立和公正的改變實例:

IUserDAL dal; 
if (AprilFirst) 
    dal = new ReasultRandomizingUserDAL(); 
else 
    dal = new UserDAL(); 

實例化的對象本身是相同的。

0

我想補充一點,使用接口更適合實現IoC容器。

0

如果你想使用控制反轉有一個很大的優勢。你可以谷歌關於它。