我目前正在开发一个使用Core
类对象的框架(此类具有巨大的功能并且使框架正常工作)。该框架遵循MVC架构和具有松散耦合的Model,Control,View类。这些类需要大量引用Core
类。到目前为止我所做的是:创建Core
类的单个对象&在Model,Control,View类中通过PHP关键字global
引用它。
我不喜欢使用这种方法主要是因为:
Core
类的对象提供文档 - 这对于将使用此框架的开发人员来说是一种痛苦。global
是慢还是其他。我搜索过&没有找到任何有关性能问题的信息。我也搜索了stackoverflow&找到了Does using global create any overhead?& The advantage / disadvantage between global variables and function parameters in PHP?等链接,但它们不包含太多信息。 现在我的主要关注点是性能,所以请帮助。
答案 0 :(得分:4)
我必须同意NevilleK,你的核心`类听起来是God Object反模式。
对于任何愚蠢到建议使用单身人士/登记处的人,我建议对这个问题进行一些研究。它们创建与经典全局变量相同的全局状态。
全局状态与性能无关(尽管在php中它有一些小的影响),但它创建了不可测试且紧密耦合的代码。
你真的应该研究依赖注入。这可能会向您展示另一种方式,即您的代码中不需要这样的Core
类。
为您准备了一些其他视频:
答案 1 :(得分:2)
我通过为Agile Toolkit创建不同的模式并在系统范围内使用它来解决adding object中的类似问题。这会将属性传递给名为“api”的新创建的对象,该对象始终引用Application class。
应用程序类实际上并不是一个上帝类,但是它将各种功能委托给系统控制器,页面等。这个截屏视频解释了基本对象是如何构造的,它可能是你正在寻找的东西:
答案 2 :(得分:1)
首先,当你关注表现时,你可能想先阅读http://en.wikipedia.org/wiki/God_object - 你的“核心”类听起来像一个“上帝对象”,这是一个相当完善的反模式。
在性能方面 - 最好的方法是测试它。如果您正在编写框架,我假设您正在编写单元测试来验证它的行为;将单元测试扩展到简单的性能指标并不难。您也可以使用JMeter或类似方法投资测试脚本,以实现使用该框架构建的几个页面的“参考实现”。通过这样做,您可以获得更好的关于您的具体情况的信息,而不是基于Stack Overflow对一般工作方式的集体知识来优化设计。
总的来说,我认为拥有一个全球级别不应该影响性能太多,只要它没有做太多工作。简单地将类加载到内存中,解析它等等确实会对性能产生影响 - 但它可能不会比您可能采用的任何其他路径慢得多。
但是,如果您的“核心”类在页面访问它时会执行大量初始化逻辑,那么它显然会影响性能。