使用依赖注入的真实世界解决方案

med*_*pal 21 c# java spring dependency-injection

我正在彻底阅读DI,看起来很有趣.到目前为止,我完全没有它.

我看到的所有例子都与JNDI以及DI如何帮助您提高灵活性有关.

您通过DI解决的现实应用/问题在其他方面难以解决?

更新
到目前为止所有的答案都在教育,但是为了重新解释这个问题,我正在寻找编程生涯中的例子,这让你说"这个问题最好用DI框架来解决".

bal*_*pha 24

就在前几天,我决定阅读依赖注入.在那之前,我只知道这个词.老实说,我对Martin Fowler的文章的反应是,"就是这样?"

我不得不同意James Shore:

对于5美分的概念,"依赖注入"是一个25美元的术语.

这并不意味着它是一个糟糕的概念.但严重的是,当一个实例A需要与另一个实例一起工作时B,它归结为这些选择:

  1. 让我们A B:

    这意味着B必须是全球性的.邪恶.

  2. 让我们A 创造 B:

    很好,如果只A需要B.只要C还需要B,替代A通过C此列表中.请注意,测试用例是a C,所以如果你想测试,这个选择也会消失.

  3. BA:

    这是依赖注入.

我错过了什么吗?(请注意,我来自Python世界,所以也许我没有看到特定于语言的点.)

  • "2.让A创造B"的关键问题不是C也需要B. 问题是适当的B类型取决于运行应用程序的上下文,我们不希望A知道上下文.这就像任何设计模式一样 - 人们经常会自然而然地使用它们,不知道甚至关心它们正在做什么的名称.这个名称非常有用,因此开发人员可以相互沟通他们正在做的事情. (6认同)
  • 这是一个非常有创意的想法.现在看起来像是一个5美分的概念,但你自己想到了吗?IOC是一个非常方便的模式. (2认同)
  • OP提到了现实生活中的问题,而且这里再次谈到A,B和C. (2认同)

bl4*_*0l7 7

昨天我在公交车上找到了一部手机.失去它的人对拥有她的手机的人一无所知.我打电话给她爸爸告诉他我有他女儿的手机.所以我把依赖从我身上注入了他.典型的例子是好莱坞原则"不要打电话给我们(因为你不能!),我们称你为".后来他来接他的女儿电话.

我称之为依赖注入我解决的现实世界问题,不是吗?

在我看来,DI不是解决问题的方法,对此我们不会有另一种解决方案.工厂可以是解决此类问题的另一种方式.所以对你的问题没有真正的答案,因为DI只是其他方式的一种方式.它只是一个非常时尚,但非常优雅的方式.

当我有这个需要SQLMapper的DAO时,我真的很喜欢DI.我只需要将不同的映射器注入到父类中一次,其余的由配置完成.节省了我很多时间和LOC,但我仍然不能说这是一个没有其他解决方案的问题.