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