【发布时间】:2012-01-10 19:25:36
【问题描述】:
我正在开发一个网站,我使用 CodeIgniter 作为我的框架,但我对他们滥用 OOP 的方式越来越感到沮丧。我不是 OOP 的粉丝,但是当我使用它时,我更喜欢一个体面的实现。所以我决定快速构建一个 PHP 框架。无论如何,我的应用程序坚持使用通常的 MVC 架构,但我想知道将模型传递给控制器和库的好方法是什么。我更愿意为控制器的构造函数提供模型的实例。类似的东西
class MyController implements IController //whatever
{
public MyController(IUrlRouteModel url_route_model, IUserModel user_model)
{
//usual assignment
}
public some_action()
{
UserEntity users = user_model->find_all();
}
}
我正在使用 PHP,但这个示例/问题并没有直接链接到 PHP,答案应该是。现在真正的问题是,我可以在哪里管理模型的实例,我可以/应该在哪里创建它们。我可能会在 \Router 的某个地方调用控制器,但是将每个模型传递给路由器的构造函数会很奇怪。有没有人可以对这个问题有所了解。我试图找出其他框架是如何做到这一点的,这就是我到目前为止所拥有的
- 他们使用 ModelKeeper 作为某种类型的模型工厂,我很喜欢这个选项,但该类的源代码会变得混乱
- 模型在静态环境中提供。要么模型的每个方法都是静态的,要么它们使用某种类型的单例模式。
分享您的经验堆栈溢出?什么是实现这一点的好方法?或者更短一点,什么是实例化模型的合适位置以及如何实例化?
PS 我猜这个模型看起来像这样
class UserModel implements IUserModel
{
public UserModel(DatabaseConnection dbc)
{ /*store for later use*/ }
}
【问题讨论】:
-
那么您的前端控制器是否实例化了所有模型和其他依赖项?你有前端控制器吗?
-
这真的取决于上下文。
-
我确实有一个前端控制器,是的,但我不知道在哪里启动模型。
-
@pinusnegra 我害怕这种反应,如果我问了一个无法回答的问题,对不起^_^
-
静态的?辛格尔顿?回到 CodeIgniter 而不是重新发明轮子。
标签: php model-view-controller oop