我过去在项目中没有使用过任何面向对象,因为我让它更简单(实际上使用古老的 mysql_query 调用和我自己的过滤),所以我想开始一个新项目,学习在我的面向对象中使用设计模式一路走来。
我想建立一个微博网站来娱乐一下,发现了 singleton design pattern看起来完整的类,并与 PDO 一起使用我看不出它有什么问题(除了无法访问两个数据库,我不确定这个项目是否需要这两个数据库)。
对于像这样的项目,或者简单的 CMS 软件,单例是一个好主意吗? “大佬”会使用什么样的设计模式/数据库类类型来完成这些事情,如果以后要升级(并发连接/性能),这是否会限制太多?
我还阅读了有关工厂单例的信息,以便稍后处理额外的连接,因为更改其中的代码更简单。这会解决任何负面问题并使其成为更合适的设计模式吗?
最佳答案
单例的目的是将对象实例限制为一个并提供全局访问。
两者都是您不想要或不需要的东西。
在 PHP 中将实例限制为一个实例是毫无意义的,因为此限制仅适用于当前请求中的实例。如果两个请求同时到达您的微博网站,则每个请求仍将有一个实例。如果您想确保只有一个实例,则只需不要实例化第二个实例即可。
全局访问也不是您想要的,因为它破坏了封装。如果您需要对象内的某个实例,请通过 dependency injection 传递它。这是干净且可维护的。它的另一个好处是允许您轻松地与其他实现交换依赖关系,例如 mock classes为您unit tests .
偶数Erich Gamma Singleton 模式的发明者之一现在对这种模式提出了质疑:
"I'm in favor of dropping Singleton. Its use is almost always a design smell"
你最好避免使用单例。
关于php - 单例对于微博网站来说是一个好的设计模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3870635/