考虑马丁·福勒(Martin Fowler)的企业应用程序体系结构的模式以及前控制器的模式: http://martinfowler.com/eaacatalog/frontcontroller.html显然,它使用单例图案。好吧,我在PHP应用程序中有一包可以合作的类(例如Zend的控制器软件包),并且有一个类使它们全部可用,并且由于它类似于前控制器的概念,因此我将其命名为Packagename_front。但是它不应该是单身班(与前控制器相对),所以我仍然让它具有前面的名字吗?如果没有,我该怎么命名?由于它是一个很大的包裹,因此我只需要尽可能多地遵循约定(不是以教条的方式!),因此对于其他开发人员来说,它是可读的。

更多信息:与控制器无关。它只是一个像zend_form一样工作的对象(它可以合并使用所有其他对象(例如zend_form_element_x和zend_validate)将其命名为一个对象),但我不能仅将其命名为packagename。它必须是packagename_something,而我只是不父亲应该是什么。也许“处理程序”?...我只是想确保何时有人读到它的名字,对它在整个软件包中的角色都不会感到困惑:)

有帮助吗?

解决方案

显然,它 FrontController 使用单例图案。

FrontController不必作为Singleton实施。这本书没有建议这样。本书中的示例使用servlet为处理程序。

仅仅因为在应用程序中只需要一次课程才能证明其作为单身人士的实现是合理的。它缺少单身的目的 执行 一堂课只能有一个实例 提供全球访问它。如果您仅需要一次特定实例,请考虑 只需创建一个即可 反而。

如今,许多人(包括Gof Fame的Erich Gamma)将Singleton视为代码气味,并劝阻它的使用。在共享的架构中,单例只能限制当前请求中的实例,因此PHP中的使用受到限制。没有单例模式,可以通过(邪恶的)全局关键字或静态方法实现对对象的全局访问。全球访问总是会创建不需要的耦合。更好的方法是使用依赖注入,这是提供较少耦合并因此更好的可维护性的额外好处。

那么,我仍然让它具有前面的名字吗?如果没有,我该怎么命名?由于它是一个很大的包裹,所以我只需要尽可能多地遵循约定(不是以教条的方式!)

没有关于命名课程的惯例 正面 据我所知。您所描述的可能是 正面 或a 网关 尽管。另外,您确定在Packagename之后不能命名课程吗?毕竟, Zend_Form 软件包有一个 Zend_Form 上课。

其他提示

从纯粹的设计视图中,当您说:

有一个班级使它们全部可用

福勒对该模式的实施说:

前控制器通过通过单个处理程序对象引导请求来合并所有请求处理

这暗示了单身人士可能被用来实现前控制器类,但它肯定不会限制使用它。他没有明确提及。

我认为是否是单身人士并不重要。只需确保它是请求的唯一渠道,您就可以成功使用该模式。 :)

Singleton模式背后的想法是确保只有一个对象的实例仅在一个实例中存在。前控制器属于这一类别,因此,遵循单身模式也许是明智的。

但是,如果您的代码始终确保它仅调用构造函数一次,那么您的非辛格尔顿模式对象就有空间。

我在这里的2美分,因为我不是任何书籍作者之类的东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top