在基于PHP的面向对象项目中,如何组织和管理辅助对象,如数据库引擎,用户通知,错误处理等?
假设我有一个大的PHP CMS.CMS由各种类别组织.几个例子:
等等
我正在处理永恒的问题,如何最好地使这些对象可以访问需要它的系统的每个部分.
很多年前,我的第一个应用程序是拥有一个包含这些类的初始化实例的$ application全局.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
Run Code Online (Sandbox Code Playgroud)
然后我切换到Singleton模式和工厂函数:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
Run Code Online (Sandbox Code Playgroud)
但我对此也不满意.单元测试和封装对我来说变得越来越重要,在我的理解中,全局/单例背后的逻辑破坏了OOP的基本思想.
那么当然有可能给每个对象提供它需要的辅助对象的许多指针,可能是最干净,资源节省和测试友好的方式,但我对这长期可维护性有疑问.
我研究过的大多数PHP框架都使用单例模式或访问初始化对象的函数.这两种方法都不错,但正如我所说的那样,我对它们都不满意.
我想扩大我对这里存在的常见模式的看法.我找实例,更多的想法和指针向资源从讨论这个长期的,真实世界的视角.
另外,我很想知道这个问题的专门,利基或简单的奇怪方法.