我有一个处理许多数据库操作的类。我希望这个类尽可能地重复使用和精心设计,而且我对OOP还不熟悉,所以我很感激这个解决方案:
更好的做法是:
class MyDatabase extends Database
{
private $connection;
public function __construct(mysqli $connection)
{
$this->connection=$connection;
}
//More functions below
}
或
class MyDatabase extends Database
{
private $connection;
public function __construct()
{
$this->connection=new mysqli(...);
}
//More functions below
}
两者的优点/缺点是什么,哪一个更经常使用?我无法自己决定应该开始使用哪一个,这将影响我正在编写的其他应用程序。
谢谢
答案 0 :(得分:1)
我建议采用第二种方法,特别是如果你不熟悉OOP。
OO中的一个关键原则是"信息隐藏",您希望在类中隐藏尽可能多的信息,以免将复杂性暴露给外部。
第二种方法的优点是它完全隐藏了所有数据库操作细节,因为构造函数不带参数。
有时候,第一种方法在更大,更复杂的系统中更受欢迎,因为你的" MyDatabase" class需要能够处理不同类型的底层数据库连接,并且需要在其构造函数中接受不同类型的连接句柄。但这是一个不同的设计,我们在其中公开数据库句柄细节,并且基本上将其作为API的一部分(也就是OO术语中的合同)包含在外部世界中。
另一种常见的OO实践是频繁的重构。如果你有一个好的IDE并保持一个相当好的编程实践,你可以相当容易地将你的代码从简单的方法(#2)重构为更复杂的(#1)而不会有太多麻烦。所以我说继续#2,保持简单,并在/如果需要的话重构。
就性能而言,我认为这两种方法没什么区别,你可以(而且应该)总是使用持久连接。所以对象开销应该是最小的。
答案 1 :(得分:1)
我建议第一个,没有硬编码依赖,可测试,并且可以随时更改连接object
。我强烈建议你watch this。