6

我有一个关于 php 中的前端控制器实现的“概念”问题。

我见过的大多数前端控制器都是用单例实现的,我不是单例模式的忠实粉丝,我创建了一个容器,它有一个静态属性,将存储一个前端控制器的 unic 实例。

使用单例,我必须将初始化代码放在构造函数(或构造函数调用的方法)中:

$fc = FrontController::getInstance();

使用容器,我可以将配置放在 FrontController 之外,这是我的目标,我仍然有一种简单的方法来检索 FrontController。

$fc = Container->getFrontController();

这段代码对我来说看起来更干净,我可以在不关心父构造函数的情况下获得干净的子类。

这在“引导”时是完全相同的,但实际上与我之前的实现不同的是,现在我可以在应用程序的任何位置(在 DAO 内或在操作内)创建 FrontController,因为构造函数不再是私有/受保护的.

我的问题是: 让我的课程的用户可以在应用程序的任何位置创建 FrontController 实例是一种“坏习惯”吗?我会编写文档并将容器与其他类一起交付,但我仍然想知道是否应该防止奇怪的用途。

4

2 回答 2

2
$fc = Container::getFrontController();

对我来说听起来不错。

我认为允许开发人员在任何地方检索 Front Controller 实例并不是一个坏习惯,如果您正确控制开发人员可以使用它做什么(例如,不要覆盖某些属性或以错误的顺序执行其方法而不显示错误/警告用户)。

于 2011-04-09T15:06:34.510 回答
2

是否有任何真正的理由在应用程序内创建 FrontController 实例?如果有那么继续。否则我对此有点怀疑,因为它可能会在以后使事情复杂化。我害怕的是有人在有更简单的方法时使用新的 FrontController 实例,要么是出于懒惰,要么是因为他们不知道更好。一旦他们找到了可行的方法,即使有更好的方法,有些人也会继续这样做。永远不要忘记,你可能不得不与不如你的人一起工作。

就个人而言,我会隐藏它或完全不允许它。但是,我会记住以后的版本。如果您偶然发现它是最好的选择,请务必将其添加到您的“官方”界面。

不要忘记,一旦你将一个函数发布到野外,就很难将其杀死。

于 2011-04-09T15:22:07.820 回答