Inf*_*ien -3 php model-view-controller dependencies dependency-injection inversion-of-control
我有一个简单的PHP MVC框架,它以这种方式工作:
StaticFramework (1)
|
V
DIC (2)
|
V
HTTPRequest
|
V
App <-> Router
|
V
Controller <-> Model
|
V
View
|
V
HTTPResponse
Run Code Online (Sandbox Code Playgroud)
(1) StaticFramework
是一个静态的"前端控制器",它给出了App
它的默认依赖性(2) DIC
(依赖注入容器),它的工作方式与Pimple类似.可以访问容器以更改这些默认依赖项.例如,Router
类被注入App
了DIC
.
我有一个问题,因为它是一个MVC应用程序,我有3个重要的层:
注入View
很容易,因为它只是一个有一个render
呈现PHP或HTML文件的方法的类,所以我只需要View
在我的注入一个实例Controller
.
但注入Model
的Controller
似乎更难.每个Model
都是一个单独的类,所以我不能像我那样注入它View
.每个人Model
也可能需要其他依赖,例如a Database
或XML
类.
此外,我无法预测Controller
将需要哪些型号,因为它可能需要其中的几种,例如,ArticleController
需要ArticleModel
和UsersModel
.
我有几个解决方案:
ModelFactory
在一个类中注入Controller
将为其设置模型的类Controller
.但是因为每个人Model
可能需要不同的依赖关系,所以ModelFactory
必须知道它需要哪一个,这似乎与PimpleDIC
相似;Controller
,并将每个模型作为单独的类,将其扩展到所需的范围.例如,如果需要MySQL连接,则Model
应该扩展Database
.但这意味着模型与其父级紧密相关,并且它使得无法Model
使用模拟类或具有多个数据源,例如,如果Model
需要两者Database
并且XML
?那么,Controller
在我的框架中注入模型的最佳方法是什么?
提前感谢您的回答.
下面的神,这让我很伤心.
</rant>
您的控制器应该与之交互Services
.该模型包含持久性抽象,域实体,服务,存储库以及用于描述应用程序业务逻辑的内容.
无论如何,要使用必要的服务填充控制器,您应该使用适当的依赖注入器.我建议使用Auryn(基于反射)或Symfony DI(基于配置).
归档时间: |
|
查看次数: |
186 次 |
最近记录: |