php - 单例对于微博网站来说是一个好的设计模式吗?

标签 php mysql design-patterns singleton pdo

我过去在项目中没有使用过任何面向对象,因为我让它更简单(实际上使用古老的 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/

相关文章:

php - 处理动态表单内容的更好做法是什么?

java - 这种一对类的情况是否有设计模式?

c++ - 解决代码中模块之间的相互依赖

ios - 我如何继承 AVPlayer?

PHP PDO 准备语句失败

php - 连接两个 MySQL 列并输出 colB.name,其中 colA.id 等于 colB.id

php - 复选框导调用子邮件提交转到 404

MySQL关于外键重复插入忽略

通过userdata在aws ec2实例上安装Mysql

php - 如何使用PDO绑定(bind)参数方法将多行文本插入mysql?