Design patterns 如何在没有tramp数据的情况下进行依赖项注入?

Design patterns 如何在没有tramp数据的情况下进行依赖项注入?,design-patterns,Design Patterns,多年来,人们一直试图让我相信单例是邪恶的,我发现我必须使用依赖注入,因为它是最新的设计模式(就像单例曾经那样)。但我无法摆脱代码的味道:传递依赖关系,有时深入到视图层次结构中,只是我们用来调用tramp数据的另一种反模式(数据只传递到实体中,以便传递到另一个实体) 我问这件事不是要激怒任何人,我真的想知道人们对这件事的看法,更重要的是,他们是如何处理的?我亲眼目睹了疯狂的长DI链,它花了大概半天的时间才得以实现,仅仅是为了删除一个单例。然后有人决定添加另一个依赖项,我们必须再次经历相同的过程。我

多年来,人们一直试图让我相信单例是邪恶的,我发现我必须使用依赖注入,因为它是最新的设计模式(就像单例曾经那样)。但我无法摆脱代码的味道:传递依赖关系,有时深入到视图层次结构中,只是我们用来调用tramp数据的另一种反模式(数据只传递到实体中,以便传递到另一个实体)


我问这件事不是要激怒任何人,我真的想知道人们对这件事的看法,更重要的是,他们是如何处理的?我亲眼目睹了疯狂的长DI链,它花了大概半天的时间才得以实现,仅仅是为了删除一个单例。然后有人决定添加另一个依赖项,我们必须再次经历相同的过程。我认为这是不值得的,所有这些复杂的接口都会造成脆弱性和未来的问题。

单身并不是坏事。但是,当使用不当时,它们也可能是

当且仅当满足以下条件时,它们才是完美的:

  • 你只需要一件东西
  • 您需要在大量方法调用中传递这一点
  • 例如,管理外部资源,如硬件或状态完整API


    但是,如果只是为了创建全局可访问变量而使用它们,那么它们就是邪恶的。单例并不是邪恶的。但是,当使用不当时,它们也可能是

    当且仅当满足以下条件时,它们才是完美的:

  • 你只需要一件东西
  • 您需要在大量方法调用中传递这一点
  • 例如,管理外部资源,如硬件或状态完整API


    但如果只是为了创建全局可访问变量而使用它们,那么它们就是邪恶的。

    这可能更适合软件工程网站。查看他们的帮助页面以确定。如果您决定在那里发布,请删除此项。DI存在的特殊原因和解决的特定任务。可能您将接口抽象为错误的实体,这就是为什么您不愿意这样做的原因。当然,您不应该将任何接口传递给视图,因为您可以将数据本身传递给视图。DI并不是万能的,它只是一种工具,使测试更容易,实现更改更灵活。这可能更适合软件工程网站。查看他们的帮助页面以确定。如果您决定在那里发布,请删除此项。DI存在的特殊原因和解决的特定任务。可能您将接口抽象为错误的实体,这就是为什么您不愿意这样做的原因。当然,您不应该将任何接口传递给视图,因为您可以将数据本身传递给视图。DI并不是万能的,它只是一种工具,可以使测试更容易,实现更改更灵活。