PDO + Singleton:为什么要使用它?

扬·特里莫洛(Yonn Trimoreau)

我在网上阅读到许多开发人员正在使用单例模式进行PDO连接。[在哪里?]

之前(在VB.Net中)我一直在使用单例模式,并且我可以肯定,它仅在必须调用一个实例两次或更多次(缺少.NET代码的代码示例)时才有用。

我目前正在一家电子商务网站上工作,我想知道在我的PDO连接上使用单例模式是否真的有用,因为我的体系结构是通过每个脚本仅需要一个连接的方式制作的。您将使用这种单例丢失]。

埃里亚斯·范·奥特格姆(Elias Van Ootegem)

为了回应这个问题(也许是答案)引起的“评论讨论”要回顾一下自己的观点,并达成普遍共识(不要跳过设备/服务器负载,因为这意味着将工时和工作时间加倍)可维护性比速度更重要,但在某些特定情况下除外)。

你说你讨厌框架谁使用框架的开发者,他们没有发展自己卖修的合同这是如何工作的?熟悉FW的任何人都可以维护使用开放源码的,已记录的FW的代码。您的代码可以由您维护
此外,PHP框架(至少是主要框架)是OPEN SOURCE我知道,从VB.NET背景开始,您可能会怀疑有这个问题,但实际上没有。他们都有github repo,可以免费复制和编辑源代码(根据许可证,总的来说,这是相当自由的)。基本上,您可以完全控制
...他们是苹果公司(包括其OSX内核的主要部分),微软,谷歌:不要老想着它的所有二年级的代码全部使用开源软件和框架不仅因为它易于开发且开发速度更快,还因为它具有成熟的技术概念

此外:性能是您的目标,并且-考虑到您讨厌框架-为什么不考虑学习汇编呢?这样,您就可以避免让笨拙的编译器将您的代码编译为效率不如预期的东西。
当然,您无需为此使用IDE,您可以选择Emacs或Butterfly,对吗?

埃马克斯蝴蝶
(来源:andreas-wilm.com

另一种方法是使用提供高级缓存功能的框架

在编写代码时,可维护性对您来说是最重要的事情:

“调试的难度是一开始编写代码的两倍。因此,如果您尽可能聪明地编写代码,那么就定义而言,您不够聪明,无法对其进行调试。—布赖恩·克尼根(Brian Kernighan)

服务器是僵尸奴隶:它们不会抱怨,鞭打它们也不是非法的。尽管有些项目经理似乎忘记了这一点,但开发人员既不是僵尸也不是奴隶:他们不能连续工作2周,鞭打开发人员仍然非法的。甚至史蒂夫·鲍尔默(Steve Ballmer)都知道...开发人员,开发人员,开发人员Microsoft的Server OS,MSSQL以及几乎所有的软件都是资源密集型的,但要研究他们的服务器OS。有许多功能只能减少系统所需的维护时间我不是MS迷,但我完全理解这种决定。他们无法在价格上击败Linux(因为它是免费的),但是他们可以通过出售系统来吸引公司,这将使系统管理员的成本降低一半。(尽管如此,ATM尚未实现,而IMO则从未实现)


这个问题是许多骗子之一,不适合SO,因此将被关闭。但是,在关闭/删除之前,我想向您指出以下几点:

首先要注意的是

当我目前在电子商务网站上工作时,我想知道在我的PDO连接上使用单例模式是否真的有用

不,从来没有。

注射PHP无法在两次请求之间保留对象的状态。服务器收到请求。解析脚本,建立数据库连接,执行查询,发送回响应并关闭连接再三,一而再再而三。
连接无法序列化,也无法以任何方式,形状或形式存储,因此:
通过良好的编码,您可以使用注入,并且同时确保每个请求仅连接到DB一次。
现在,静力学是全局变量:如果您还想传递一个参数,您会使用全局变量吗?为您带来疑问的好处,我想您的答案是否定的
因此,剩下的单例剩余的一些好处不值得为使用单例的代码编写体面的,有效的单元测试而付出的精力。

为什么

我的架构的构建方式是每个脚本只需要一个连接。

Then your code isn't very scalable. I know this is a blanket statement, and a terrible cliché, but it just is the case here. Just like your presumtion that each script only needs one connection might be true right now, but who's to say that will always be the case?
Refactoring the DB, adding support for another adapter, testing (as mentioned before) become increasingly difficult, as you'll write code and, without noticing it, that new code will be adapted to maintain the singleton.
This means that you'll write code to preserve what was, because you're working around its problems, a bad design decision.

Think of it like this:
You build a house, and decide to build a concrete pilar into the corridor, because that's where you'll hang your coat-hangers anyway, and you'll never change that. But Singleton implies that you're writing OO code. The whole point is that you can re-use code. Now: do you honestly think that you'll be able to sell your house just as easily if it had an immovable coat-hanger, as it would be if that thing wouldn't be there? of course not!

And I'm quite sure that it's only useful when you have to call an instance twice or more.

If that's so: use another pattern, or take a leaf out of the Symfony book, and make the connection available to whatever object needs it using a container (dependency injection component is worth a google search).

Testing:

前面已经解释了所有内容,但是测试单例代码是一场噩梦。学习使用注射。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章