我有一个关于 php 中的前端控制器实现的“概念”问题。
我见过的大多数前端控制器都是用单例实现的,我不是单例模式的忠实粉丝,我创建了一个容器,它有一个静态属性,将存储一个前端控制器的 unic 实例。
使用单例,我必须将初始化代码放在构造函数(或构造函数调用的方法)中:
$fc = FrontController::getInstance();
使用容器,我可以将配置放在 FrontController 之外,这是我的目标,我仍然有一种简单的方法来检索 FrontController。
$fc = Container->getFrontController();
这段代码对我来说看起来更干净,我可以在不关心父构造函数的情况下获得干净的子类。
这在“引导”时是完全相同的,但实际上与我之前的实现不同的是,现在我可以在应用程序的任何位置(在 DAO 内或在操作内)创建 FrontController,因为构造函数不再是私有/受保护的.
我的问题是: 让我的课程的用户可以在应用程序的任何位置创建 FrontController 实例是一种“坏习惯”吗?我会编写文档并将容器与其他类一起交付,但我仍然想知道是否应该防止奇怪的用途。