将数据库CODE解耦为真实的

时间:2012-03-11 10:15:11

标签: php database decoupling

我正在创建一个Web应用程序的项目中。用php5写。

当我创建用户系统(登录,注册新用户和东西)时,我突然间到处都有数据库代码。不要误会我的意思,我使用单一数据库类和单个查询函数。

class MySQLDB {

    private staic $instance = null;
    private $config;
    private $connection = null;

    [...]

    public function query($query, $other_dbname = NULL) {
        $name = $this->config->dbname;
        if($other_dbname != NULL) {
            $name = $other_dbname;
        }

        mysql_select_db($name, $this->connection);
        $result = mysql_query($query);
        [...]
    }

到目前为止一切顺利。但是,在哪里放SQL查询?我的意思是,在Internet上的示例中,您会看到身份验证系统中的数据库查询在两个完全不同的模块之间建立了强大的耦合。如果我们决定不使用MySQL数据库怎么办?然后你不必只需要用连接和查询函数来交换MySQLDB类,而是整个Web应用程序的所有部分都使用SQL查询。

我的解决方案是在MySQLDB类旁边有一个MySQLQueryer静态类。我保留并执行所有SQL查询的位置。像这样注册一个新用户函数:

public function register($user, $hash, $salt) {
    $user = mysql_real_escape_string($user);
    $query = "INSERT INTO users ( username, password, salt ) VALUES ( '$user' , '$hash' , '$salt' );";
    $ret = $this->db->query($query);

    return $ret;
}

请注意,哈希和salt的所有创建都在用户身份验证模块中完成(即不是数据库模块)。

您认为这是一个很好的解决方案还是有更好的解决方案?例如,创建一个带有上述寄存器功能的AuthenticationMySQLDatabaseHelper类会更好吗?也就是说,让每个单独的模块都有自己的MySQLDatabaseHelper类来执行查询。

也许我让这个问题变得更大了?

1 个答案:

答案 0 :(得分:1)

正如biziclop所说:看看

或其他抽象层。

如果你想自己构建一些东西,那么你尝试做的就好了。