我对php中的Front Controller实现有一个“概念上的”问题。
我周围看到的大多数Front Controller都是使用Singleton实现的,我不是Singleton模式的忠实拥护者,并且我创建了一个Container,该Container具有静态属性,该属性将存储Front Controller的unic实例。
使用singleton,我必须将初始化代码放入构造函数(或构造函数调用的方法)中:
$fc = FrontController::getInstance();
使用容器,我可以将配置放在FrontController之外,这是我的目标,而且我仍然可以通过一种简单的方法来检索FrontController。
$fc = Container->getFrontController();
这段代码对我来说看起来更干净,我可以在不关心父构造函数的情况下获得干净的子类。
在“引导”时这是完全相同的事情,但是实际上与我以前的实现的区别在于,现在我可以在应用程序中的任何位置(在DAO内或Action内)创建FrontControllers,因为构造函数不再是私有(private)的/ protected 。
我的问题是:
给类(class)用户提供在应用程序中任何位置创建FrontController实例的可能性是“不道德的做法”吗?我会编写文档并与其他类一起交付容器,但是我仍然想知道是否应该防止奇怪的用途。
最佳答案
是否有任何真正的理由在应用程序内部创建FrontController实例?如果有,那就继续。否则,我对此会有所怀疑,因为这可能会使以后的事情复杂化。我担心的是有人在使用一种更简单的方法时使用了新的FrontController实例,要么出于懒惰,要么是因为他们不懂得更好。一旦找到可行的方法,即使有更好的方法,有些人也会继续这样做。永远不要忘记,您可能必须与不如您的人一起工作。
就我个人而言,我会隐藏或完全不允许这样做。但是,我会在以后的发行版中牢记这一点。如果您偶然发现最好的选择,那就将其添加到“官方”界面中。
不要忘了,一旦您将某个功能发布到野外,杀死它就变得异常困难。
关于没有单例: conceptual question的PHP Front Controller实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5605681/