Pet*_*rne 5 architecture model-view-controller design-patterns dependency-injection
我感兴趣的是将依赖注入应用于我当前的项目,该项目使用了MVC模式.
我的控制器将调用模型,因此需要将依赖项注入模型中.为此,控制器必须首先具有依赖项(例如数据库对象).控制器不需要使用其中的一些依赖项(例如数据库对象),所以我觉得不应该给它这种依赖.但是,如果要将它们注入模型对象,则必须具有这些依赖关系.
如何避免将依赖项注入到对象中以便它可以传递它们?这样做会感觉不对,并且可能导致许多依赖项被注入到对象中.
编辑:我正在使用PHP.
我同意你的担忧。获取依赖项的唯一目的是将它们传递给其他依赖项,这是一种代码味道。
根据这些依赖项之间的确切交互,您有几个选项:
如果只需要一个依赖项实例
如果您的控制器只需要依赖项的单个实例,那么只需对其进行依赖即可。
(对 C# 代码表示歉意)
不要这样做:
public class MyController
{
public MyController(IDb db)
{
var dep = new MyDependency(db);
// Use dep or save it for later
}
}
Run Code Online (Sandbox Code Playgroud)
相反,您可以这样做:
public class MyController
{
public MyController(MyDependency dep)
{
// Use dep or save it for later
}
}
Run Code Online (Sandbox Code Playgroud)
您可能需要考虑MyDependency接口本身的背后。另请参阅重构聚合服务。
如果您需要在控制器的生命周期内创建多个实例
然而,有时您需要动态创建多个实例。当您需要一个仅在运行时可用的值才能完全填充依赖项时,通常会出现这种情况。
在这种情况下,抽象工厂是一个优秀且通用的解决方案。
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |