4

我有一个处理许多数据库操作的类。我希望该类尽可能可重用且设计良好,而且我对 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

}

两者的优缺点是什么,哪个更常用?我无法真正决定自己应该开始使用哪一个,它会影响我正在编写的应用程序的其余部分。

谢谢

4

2 回答 2

1

我建议使用第二种方法,特别是如果您是 OOP 新手。

OO 中的一个关键原则是“信息隐藏”,您希望在类中隐藏尽可能多的信息,以免将复杂性暴露给外部。

第二种方法的优点是它完全隐藏了所有数据库操作细节,因为构造函数不带参数。

有时,第一种方法在更大更复杂的系统中更可取,其中您的“MyDatabase”类需要能够处理不同类型的底层数据库连接,并且可能需要在其构造函数中采用不同类型的连接句柄。但这是一种不同的设计,其中我们将数据库句柄细节公开,并且本质上将其作为 API 的一部分(在 OO 术语中称为合同)向外界开放。

另一个常见的 OO 实践是频繁的重构。如果您有一个好的 IDE 并保持相当好的编程习惯,您可以相当轻松地将代码从更简单的方法 (#2) 重构为更复杂的方法 (#1),而不会有太多麻烦。所以我说继续#2,保持简单,并在需要时/如果需要重构。

在性能方面,我认为这两种方法差别不大,无论如何您都可以(并且应该)始终使用持久连接。所以对象开销应该是最小的。

于 2013-09-15T23:43:18.800 回答
1

我建议第一个,没有硬编码依赖,可测试并且可以随时更改连接object。我强烈推荐你看这个

于 2013-09-15T23:54:11.987 回答