首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖注入&使用接口?

依赖注入&使用接口?
EN

Stack Overflow用户
提问于 2012-02-25 17:59:04
回答 2查看 20.9K关注 0票数 37

我注意到许多开发人员为定义了一个接口--每个要使用DI框架注入的类。定义每个类的接口有什么好处?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-25 19:11:22

让应用程序组件(包含应用程序逻辑的类)实现接口很重要,因为这促进了以下概念:

编程到接口,而不是实现。

这实际上是依赖反演原理。这样做允许您替换、拦截或修饰依赖项,而无需更改此类依赖项的使用者。

然而,在许多情况下,开发人员在类和接口之间进行几乎一对一的映射时,将违反实心原则。几乎可以肯定违反的原则之一是开放/封闭原则,因为当每个类都有自己的接口时,就不可能扩展(修饰)一组具有交叉关注点的类(没有动态代理生成欺骗)。

在我编写的系统中,我定义了两个覆盖业务层大部分代码的通用接口。它们被称为ICommandHandler<TCommand>IQueryHandler<TQuery, TResult>

代码语言:javascript
复制
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%的组件实现了我定义的这些通用接口之一。这使得对那些所谓的连接点应用横切关注点变得微不足道。

票数 23
EN

Stack Overflow用户

发布于 2012-02-25 18:09:38

如果您不针对接口进行设计,那么在重构代码和/或添加增强功能时,您将受到限制。当涉及到接口的设计时,使用DI框架并不是真正的问题。DI给您的是后期绑定和编写单元测试的更好能力。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9446502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档