我正在开发一个具有三层实现的asp.net项目。 DataAccess Layer就在那里.DataAccessContract是一个层,它包含dataaccess层实现的所有类的接口。同样,我们有一个业务层和一个businessLayer契约。
现在,当我们从业务层调用数据访问时,我们调用
IUserDAL userControllerDAL=new UserDAL();
UserDAL位于DataAccess中,IUserDAL位于DataAccessContract内。
我本可以这样做的
UserDAL user=new UserDAL();
这两种方法之间的区别是什么,第一种方法优于第二方法。是第一种情况下的一些模式。请用一些例子来解释。
答案 0 :(得分:2)
对象以完全相同的方式实例化,但是您可以从该对象访问的内容是不同的。通常,界面提供的功能较少,如果您不希望开发人员执行某些操作,这可能是一件好事。或者可以对对象中的某些方法进行显式声明,只能通过接口访问。
答案 1 :(得分:0)
目的是将合同(您正在使用的接口)与实现(实现该接口的类)分开。
假设您要实现一个结果随机化DAL(仅仅是为了它)。如果选项1,您需要从DAL继承,或修改使用DAL的所有地方。
继承是有问题的:DAL实现可能已被密封,您可能希望继承其他内容等。
在第二种情况下,您使您的类独立,只需更改实例化:
IUserDAL dal;
if (AprilFirst)
dal = new ReasultRandomizingUserDAL();
else
dal = new UserDAL();
实例化的对象本身是相同的。
答案 2 :(得分:0)
我想补充一点,使用接口更适合实现IoC容器。
答案 3 :(得分:0)
如果您想使用控制反转,那么有一个很大的优势。你可以谷歌谈论它。
答案 4 :(得分:-1)
请参阅Why are interfaces important
它应该回答你的问题:D