1

我创建了一个扩展 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
{
  ...
}

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

4

0 回答 0