gpt4 book ai didi

model-view-controller - 如何避免将依赖项注入(inject)对象以便它可以传递它们?

转载 作者:行者123 更新时间:2023-12-04 20:59:17 26 4
gpt4 key购买 nike

我有兴趣将依赖注入(inject)应用到我当前的项目中,该项目使用 MVC 模式。

我的 Controller 将调用模型,因此需要将依赖项注入(inject)模型中。为此, Controller 必须首先具有依赖项(例如数据库对象)。 Controller 不需要使用其中的一些依赖(比如数据库对象),所以我觉得不应该给它这个依赖。但是,如果要将它们注入(inject)模型对象,则必须具有这些依赖关系。

如何避免将依赖项注入(inject)到对象中以便它可以传递它们?这样做感觉不对,并且可能导致许多依赖项被注入(inject)到对象中。

编辑:我正在使用 PHP。

最佳答案

我同意你的担忧。仅出于将依赖项传递给其他依赖项的目的而获取依赖项是一种代码异味。

根据这些依赖项之间的确切交互,您有几个选择:

如果只需要一个依赖实例

如果您的 Controller 只需要一个依赖项的实例,那么只需对其进行依赖即可。

(为 c# 代码道歉)

不要做这个:

public class MyController
{
public MyController(IDb db)
{
var dep = new MyDependency(db);
// Use dep or save it for later
}
}

相反,您可以这样做:
public class MyController
{
public MyController(MyDependency dep)
{
// Use dep or save it for later
}
}

你可以考虑 MyDependency在接口(interface)本身的后面。另见 Refactoring to Aggregate Services .

如果您需要在 Controller 的生命周期内创建多个实例

但是,有时您需要动态创建多个实例。当您需要一个仅在运行时可用的值才能完全填充依赖项时,通常会出现这种情况。

在这种情况下, Abstract Factoryexcellent and universal solution .

关于model-view-controller - 如何避免将依赖项注入(inject)对象以便它可以传递它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2591665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com