【问题标题】:Loose coupling and returning an object松耦合并返回一个对象
【发布时间】:2014-11-23 07:11:31
【问题描述】:

我已经在互联网上寻找了一段时间,但找不到确切的答案。好吧,他们说将抽象(接口或其他东西)注入到一个类中,而不是让它创建它需要的实例,或者传递一个实现类型。

class Foo
{
    private IBar _bar;

    public Foo(Ibar bar)
    {
        _bar = bar;
    }
}

虽然我不完全理解上面是如何合理松散耦合的,但我现在的问题是关于其他的。也就是说,如果一个方法必须返回某个东西的实例怎么办。例如,如何使以下内容松散耦合:

class Foo
{
    public IBar GetMeSomething()
    {
         return new Bar(); // dependency here
    }
}

我只是想知道如何解决上述对 Bar 的依赖?任何有经验的程序员请帮助我理解这一点。或者有人可能会建议一些文章全面讨论消除/减少类型相互依赖的所有此类场景。

【问题讨论】:

    标签: dependency-injection inversion-of-control loose-coupling


    【解决方案1】:

    当一个类需要了解您的程序的“某些事情”时,您可以通过在构造函数中传递另一个类的实例来解决这个问题。

    如果您在构造函数中只接受接口而不是具体类,您以后可以轻松更改实现。

    如果你必须在运行时创建对象,你需要工厂,你的类 Foo 在你的情况下是一个 IBarFactory(因为它实例化了 IBars)。

    任何 IoC 框架都可以通过接口轻松解决构造函数中的依赖关系(工厂也可以在构造函数中传递),而工厂本身的实现可以直接或通过 IoC 框架实例化对象,因为这是类的职责。

    使用 IoC 容器和依赖注入并不会因为魔术而发生松耦合,您仍然必须牢记使用 SOLID 原则对类进行建模,但在使用 SOLID 原则时,IoC 容器和 DI 有很大帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多