gpt4 book ai didi

php - 在哪里加载 Controller 依赖类?

转载 作者:可可西里 更新时间:2023-10-31 23:40:22 24 4
gpt4 key购买 nike

我正在用 PHP 制作我自己的原始 MVC 框架,我想知道我应该在哪里加载/实例化相应的 Controller 依赖项?

在每个 Controller 的构造函数中(紧耦合)还是注入(inject)它们(松耦合)?

我不太确定后者的唯一部分是在注入(inject)之前在 MVC 范例之外的 Bootstrap 级别实例化依赖项。除了默认的父 Controller 之外,并非每个 Controller 都使用完全相同的依赖项。我必须将它们全部实例化,这也会产生大量开销。

我见过一些现有的框架像 $this->load->model('model');//构造函数中的 CodeIgniter,但我不知道他们为什么这样做。

最佳答案

我建议您注入(inject)依赖项,这样您的 Controller 就不会与您的框架耦合。这将使切换到另一个框架变得更加容易。

关于实例化依赖:我建议你使用(或实现)一个dependency injection容器。此容器应包含 factories可以实例化服务。

在理想情况下,您的 Controller 也是服务(意味着它们在依赖注入(inject)容器中也有工厂)。

这样只会实例化特定请求所需的 Controller ,因此只会实例化其依赖项。
在构建自己的框架时,这意味着在路由阶段之后(当知道正确的 Controller 时),框架应该从容器中获取该 Controller 。容器本身将确保提供所有需要的依赖项。

看看Pimple一个简单的依赖注入(inject)容器的例子。

PS:CodeIgniter 的那一行看起来很像 service locator pattern .此模式类似于 dependency injection , 但不提供完整 inversion of control .

关于php - 在哪里加载 Controller 依赖类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24841701/

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