Хотя можно утверждать, что любой API, который скрывает детали низкоуровневого взаимодействия с базой данных, в буквальном смысле является «уровнем абстракции», термин «уровень абстракции базы данных» обычно используется для обозначения более конкретноготип API.
Я ожидаю, что DBAL будет иметь как минимум потенциал для поддержки более чем одного типа СУБД;«абстракция» в имени подразумевает, что API не тесно связан с одним базовым протоколом или драйвером.
Расширение MySQLi PHP именует себя "соединителем", который заключает в себе низкоуровневый "драйвер", хотя эта терминология не особенно распространена.Для большинства пользователей PHP это будет просто «драйвер MySQL», тесно связанный с функциями этой СУБД.
Расширение PDO PHP, безусловно, можно рассматривать как DBAL, поскольку оно объединяет доступ к различным базам данных.драйверы, и обобщает некоторые понятия, такие как параметры запроса.С другой стороны, это довольно «низкоуровневая» абстракция, в которой раскрывается большая сложность базовых систем. Введение в руководстве называет его «уровнем абстракции доступа к данным», в отличие от «полноценного уровня абстракции базы данных».
Doctrine DBAL , с другой стороны, предоставляет более богатый API для таких функций, как транзакции, и включает построитель запросов, который абстрагирует различия в синтаксисе SQL.Код, написанный для использования PDO, все равно должен был бы использовать правильный синтаксис и параметры для конкретной СУБД, тогда как код, написанный для использования Doctrine DBAL, теоретически может работать на любой поддерживаемой СУБД без изменений.
Возможны даже более богатые абстракции, напримеркак объектно-реляционные картографы, такие как Doctrine ORM .Они, как правило, не называются DBAL, хотя, строго говоря, они представляют уровень, который абстрагирует базы данных.
Имейте в виду, что все это просто удобство для ссылок на вещи - нет закона о том, что приложение должноиспользовать определенный набор слоев, или что эти слои должны соответствовать определенным категориям.То же самое относится и к шаблонам проектирования, поэтому ваш вопрос о шаблоне Facade в общем случае не отвечает, если вы реализуете DBAL, вы можете использовать шаблон Facade в качестве руководства по его структурированию;но вы могли бы работать в контексте, где это не было полезным способом понимания архитектуры.