我注意到许多开发人员为定义了一个接口--每个要使用DI框架注入的类。定义每个类的接口有什么好处?
发布于 2012-02-25 19:11:22
让应用程序组件(包含应用程序逻辑的类)实现接口很重要,因为这促进了以下概念:
编程到接口,而不是实现。
这实际上是依赖反演原理。这样做允许您替换、拦截或修饰依赖项,而无需更改此类依赖项的使用者。
然而,在许多情况下,开发人员在类和接口之间进行几乎一对一的映射时,将违反实心原则。几乎可以肯定违反的原则之一是开放/封闭原则,因为当每个类都有自己的接口时,就不可能扩展(修饰)一组具有交叉关注点的类(没有动态代理生成欺骗)。
在我编写的系统中,我定义了两个覆盖业务层大部分代码的通用接口。它们被称为ICommandHandler<TCommand>和IQueryHandler<TQuery, TResult>
public interface ICommandHandler<TCommand>
{
void Handle(TCommand command);
}
public interface IQueryHandler<TQuery, TResult> where TQuery : IQuery<TResult>
{
TResult Handle(TQuery query);
}除了不必定义多个接口的好副作用外,这还允许极大的灵活性和测试的方便性。您可以阅读更多关于它的这里和这里。
根据我编写的系统,我还可以使用接口,如:
IValidator<T>ISecurityValidator<T>IRepository<T>,存储库模式IAuthorizationFilter<T>,用于在IQueryable<T>查询上应用授权/安全筛选。根据我编写的系统,80%到98%的组件实现了我定义的这些通用接口之一。这使得对那些所谓的连接点应用横切关注点变得微不足道。
发布于 2012-02-25 18:09:38
如果您不针对接口进行设计,那么在重构代码和/或添加增强功能时,您将受到限制。当涉及到接口的设计时,使用DI框架并不是真正的问题。DI给您的是后期绑定和编写单元测试的更好能力。
https://stackoverflow.com/questions/9446502
复制相似问题