我创建了一个扩展 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 的类实现的(但这与我的问题无关)