问题描述
我目前使用的IoC提供存储库的具体implemenations在一个项目我。所有这一切我已经阅读使用一个接口作为服务的定义的例子。不过,在读取微软是通过接口建议 preFER抽象类的建议。
我发现这个有用conjuntion与模板图案,以减少重复。例如给一个产品
类属性 IsActive
我可以使用的资源库,如接口:
interface IProductRepository
{
IEnumerable<Product> Load();
}
If a common task is to load active products then I would need to do:
IEnumerable<Product> activeProducts = repository.Load().Where(x => x.IsActive);
Where repository
is a concrete implementation. If I used an abstract class such as:
abstract class ProductRepository
{
protected abstract IEnumerable<Product> LoadCore();
public IEnumerable<Product> Load()
{
return LoadCore().Where(x => x.IsActive);
}
}
Then I could load active products using
IEnumerable<Product> activeProducts = repository.Load();
有没有好处在于使用抽象类的接口呢?我会遇到什么潜在的缺点,使用抽象类?
我使用的温莎城堡作为国际奥委会控制器和.NET Framework 3.5。
I am using Castle Windsor as the IoC controller and .Net framework 3.5.
推荐答案
我不认为这个问题取决于国际奥委会;大多数这些框架不在乎你使用。
I don't think this question hinges on IoC; most of these frameworks don't care which you use.
使用接口在抽象基类之间最大的问题是,interfaces不能进行版本以及。
The big issue between using interfaces over abstract base classes is that interfaces cannot be versioned well.
抽象基类是因为这通常是更好的选择。我不认为有任何的缺点,使用一个抽象基类,除获得支持的问题,如为什么我不能创建这种类型的实例?
Abstract base classes are usually the better choice because of this. I don't think there is any drawback to using an abstract base class, other than getting support questions like "why can't I create an instance of this type?"
这篇关于抽象类和接口的IoC服务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!