【问题标题】:Dependency Injection - Who owns the Interface?依赖注入 - 谁拥有接口?
【发布时间】:2010-12-16 10:25:34
【问题描述】:

假设我想在 AOP 方法中使用依赖注入框架,目标是生成代码模块。共享接口所有权的最佳实践是什么?所有权是指为了使用接口而需要引用的代码主体。

我的第一个猜测是,在 AOP 中,您将定义一个接口类库,按方面命名空间。例如:company.aspect.logging.ILogger。然后每个模块都会引用这个库,避免在 ILogger 的实现中涉及的任何代码也定义 ILogger。

最佳实践?

【问题讨论】:

  • 这正是我要做的(在单独的类中有接口,只包含接口)。

标签: dependency-injection aop


【解决方案1】:

定义接口类库是一个好的开始。这为您提供了最大的灵活性,因为您可以完全独立地改变所有消费者和所有实施者。

这种方法的缺点是,如果你的接口自己像这样导出其他接口:

public interface IMyInterface
{
    IMyOtherInterface DoStuff();
}

您可能需要编写大量映射代码来从接口填充具体类(或者您可以使用AutoMapper)。

如果您只有一个消费者但有几个 impelementers,您可以通过与消费者(从不与实现者)一起定义接口来为自己节省一些映射,但您会失去一些灵活性。但是,您仍然可以独立于消费者来改变实施者,但不能反过来。

【讨论】:

  • 我认为依赖注入框架会处理很多映射代码,以 Google 的 Guice 为例。特别感谢 AutoMapper 的介绍。关于我的问题,我对这个工具的第一个想法是: 1 - 定义与实现的接口 2 - 使用 AutoMapper 构建适配器层 从而实现对第 3 方模块的封装和支持。只是在沉思……
【解决方案2】:

这取决于接口的用途:

如果接口的目的是在一组替代供应商和单个消费者之间定义标准协议,则该接口归消费者所有。

如果接口的目的是在单个供应商和一组替代消费者之间定义标准协议,则该接口归供应商所有。

如果接口的目的是在一组替代供应商和一组替代消费者之间定义一个标准协议,则该接口独立存在。

最后,如果接口被用作降低复杂性的通用方法,则它们通常由消费者拥有,并且应尽可能狭义地定义,以便每个接口都支持消费者的特定需求需求上下文。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 2017-06-10
    • 2018-09-27
    • 1970-01-01
    • 2012-11-28
    • 2011-12-05
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多