数据库类实现

时间:2013-01-31 15:16:16

标签: php oop pdo odbc

我创建了一个扩展PDO的连接类,使用了诸如modelize,get_tables,create,insert等方法......它非常适合MySQL。

然后我创建了一个History类,它扩展了Connection,并在每次对DB执行操作时在日志文件或表中添加CRUD历史记录。它们都为所有与CRUD相关的方法实现了一个接口。它仍然适用于MySQL。

现在,我需要使用SQLite。

我在Connection中有很多函数必须重写,所以我想我可以保留我的Connection类,用这些特定于DB的函数创建一个接口(引擎),并为MySQL和SQLite开发特定的类,这将扩展Connection 。

但是现在如果我想使用历史记录 - 它没有特定于数据库的方法......我该怎么做?

我想知道构建这些类的最佳方法是什么。

谢谢!

namespace bbn\db;

class connection extends \PDO implements actions, api, engines{
  public function __construct($cfg){
    ...
  }
  ...
}

interface api
{

    public function select($table, $fields, $where, $order, $limit, $start);

    public function insert($table, array $values, $ignore);

    public function insert_update($table, array $values);

    public function update($table, array $values, array $where);

    public function delete($table, array $where);

    public function insert_ignore($table, array $values);
}


interface engines
{

    public function __construct($cfg);

    public function change($db);

    public function get_full_name($table, $escaped=false);

    public function disable_keys();

    public function enable_keys();

    public function get_databases();

    public function get_tables();

    public function get_columns($table);

    public function get_keys($table);

    public function get_create($table);

    public function get_delete($table, array $where);

    public function get_select($table, array $fields = array(), array $where = array(), $order, $limit, $start, $php = false);

    public function get_insert($table, array $fields = array(), $ignore = false, $php = false);

    public function get_update($table, array $fields = array(), array $where = array(), $php = false);

    public function create_db_index($table, $column);

    public function delete_db_index($table, $column);

}

class history extends connection implements api
{
    ...
}

class mysql extends connection implements engines
{
  ...
}

class sqlite extends connection implements engines
{
  ...
}

如果您想知道“actions”接口是由另一个扩展PDOStatement的类实现的(但它与我的问题无关)

0 个答案:

没有答案