Шаблон проектирования адаптера приходит на ум
Компонент «с полки» предлагает привлекательные функциональные возможности, которые вы хотели бы использовать повторно, но его «взгляд на мир» не совместим с философией и архитектурой разрабатываемой системы.
Для вашей конкретной проблемы это означает, что вы создаете класс для вашей платформы, который предоставляет API со всеми методами, необходимыми для других ваших классов. Это единственный интерфейс, с которым вы будете взаимодействовать. Затем вы создаете адаптеры для каждой базы данных, которую хотите поддерживать. Таким образом, ваш адаптер станет медитирующим звеном между вашей структурой и DAL.
Пример:
interface DB_Interface
{
public function somethingYourFrameworkUses();
}
class YourDB implements DB_Interface
{
public function setAdapter(DB_Interface $adapter)
{
$this->adapter = $adapter;
}
public function somethingYourFrameworkUses()
{
$this->adapter->somethingYourFrameworkUses();
}
}
Выше ваш основной класс. Вы будете взаимодействовать с этим классом только из оставшегося кода фреймворка. Функциональность, необходимая для взаимодействия с конкретной базой данных, содержится в конкретном адаптере. Вы создаете и внедряете адаптер во время выполнения.
class PDO_Adapter implements DBInterface
{
public function somethingYourFrameworkUses()
{
// code to make this function work with PDO
}
}
class MySQLi_Adapter implements DBInterface
{
public function somethingYourFrameworkUses()
{
// code to make this function work with MySQLiAdapter
}
}
Добавьте дополнительные адаптеры по своему усмотрению.