依赖性 C#
近来看了一些外国人写的书籍,
发现了一个不太习惯的地方:
那就是他们写程序的时候喜欢写一个接口 , 比如:
public interface IProductRepository
{
IQueryable<Product> Products { get; }
void SaveProduct(Product product);
void DeleteProduct(Product product);
}//end interface
然后写一个具体的类来继承接口
public class EFProductRepository : IProductRepository
{
//具体不写了
}
最后就是将类模型绑定到 ninject 中
ninjectKernel.Bind<IProductRepository>().To<EFProductRepository>();
后面程序里面用的时候,就用:
IProductRepository repository这个就行了!!
我的问题是:为什么一开始不直接写具体的EFProductRepository , 用的时候就直接用EFProductRepository ,接口看起来很多余!
我看别人的说法是:使用di容器(比如刚才的ninject)可以保持松散耦合,什么叫松散耦合,什么叫依赖性啊??
------解决方案--------------------就是说比如
A调用B,那么A依赖B,如果我们需要让A调用C,那么就要修改A的代码。
class A
{
public void foo()
{
//B b = new B();
//b.bar();
C c = new C();
c.bar();
}
}
class B
{
public void bar()
{
...
}
}
class C
{
public void bar()
{
...
}
}
为什么我们要让A调用C?比如B是一个SQL Server数据库的访问层,C是一个MySQL的访问层,A是BLL,现在我们要替换实现,那么就需要修改A了。
我们希望A不修改,怎么办?
class A
{
Public I dal;
public void foo()
{
dal.bar();
}
}
interface I
{
void bar();
}
class B : I
{
public void bar()
{
...
}
}
class C : I
{
public void bar()
{
...
}
}
我们只要在实例化