【发布时间】:2012-06-05 15:55:54
【问题描述】:
首先,我知道
- 不要重新发明轮子
- 有很多 MVC 框架。
这不是为了制作作品,而是为了我的爱好项目。我从头开始编写 MVC 是为了更深入地了解 MVC,并让我自己满意。最后,我可以对自己说:“伙计,你做到了。你自己写了一个 MVC 框架!”
现在解决我的问题。通常,我们会在 MVC 中编写一些类,并且从一开始就在那里。我们通常称它们为Bootstrapper、Router、Registry 和Config。可能还有更多,但我现在想专注于这些。通常,每个请求我们不需要这些类的多个实例(单例?)。我认为从名称本身就很清楚这些类的作用。所以现在我的问题:
谁先开始(我认为是Bootstrapper)?这些类是如何联系在一起的?他们都需要单身吗?我们如何使这些(Bootstrapper 可能是一个例外)的实例可用于应用程序中的其他类(也许我们使用单例)?
【问题讨论】:
-
引导程序和注册表可能在某些功能中重叠...我会选择一个加载类并跟踪加载内容的引导程序(也可以由注册表完成的任务),然后加载配置如果您尽早需要它...路由器可能是最后一个,因为它需要其他资源才能工作,并且只处理已经启动并运行的框架(因为它路由来自 url 的请求)
-
唯一的单例应该是数据库类,否则它的反模式,使用
$test =& new $clas1已被弃用,它可以将对象作为参数传递并注入它,这在模型中称为dependency injection您可以使用 phps 自动加载功能。 -
@LawrenceCherone,单例在面向对象的应用程序中没有位置。 根本没有。没有任何借口!
-
@LawrenceCherone ,仅仅因为你真的不擅长依赖注入,这不是借口。在 MVC 中,DB 交互发生在Data Source Layer(通常以DataMapper 的形式)。由于您不应该在对象树的深处有
new运算符,因此它们将使用Factory实例进行实例化。这个工厂可以为每个新的数据源对象提供 same PDO 实例 .. 通过注入。 -
@Joomos:我同意你的看法。 “不要重新发明轮子”是个好主意,但是,学习“别人的轮子”,很难,这就是为什么有些人将“重新发明轮子”作为一个学习过程......