2010-02-25 83 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

如果你想使用控制反转有一个很大的优势。你可以谷歌关于它。