Уровень абстракции базы данных - Что это?

У меня есть несколько основных вопросов о слоях абстракции базы данных (dbal). Я хочу лучше понять это. Я уже знаю, что dbal - это интерфейс прикладного программирования. Я использую PHP в качестве основного языка программирования и MySQL в качестве базы данных, поэтому мои вопросы будут основаны на нем. Давайте начнем...

  • Является ли оболочка MySQL уже dbal в более глубоком смысле? Я привожу вам пример, следующая команда напечатает результат, и я могу обработать его в моем сценарии. Так что мне кажется, что API, очень плохой, но это будет работать.

    mysql --batch -u root -p -e "select * from foobar"

  • Являются ли улучшенное расширение MySQL и объекты данных PHP также dbal? Я бы сказал, да, потому что он дает мне хороший API для работы с базами данных внутри PHP.

  • Долгое время я думал, что обработка различных баз данных в одном API-интерфейсе - основная идея dbal. Однако я понял, что это база данных, а не dbal. Поэтому, когда dbal может обрабатывать более одной базы данных, это не зависит от базы данных, я прав?

  • Итак, последний вопрос. После того, как я занялся этой темой, я понял, что dbal - это фасады. Ну, каждый dbal - это интерфейс программирования, это должно означать, что каждый API - это фасад в смысле шаблона проектирования? Это правильно?

Спасибо за вашу помощь:)

1 ответ

Решение

Хотя можно утверждать, что любой API, который скрывает детали низкоуровневого взаимодействия с базой данных, в буквальном смысле является "уровнем абстракции", термин "Уровень абстракции базы данных" обычно используется для обозначения более конкретного типа API.,

Я ожидаю, что DBAL будет иметь по крайней мере потенциал для поддержки более чем одного типа СУБД; "абстракция" в имени подразумевает, что API не тесно связан с одним базовым протоколом или драйвером.

Расширение MySQLi PHP именует себя "соединителем", который заключает в себе низкоуровневый "драйвер", хотя эта терминология не особенно распространена. Для большинства пользователей PHP это будет просто "драйвер MySQL", тесно связанный с функциями этой СУБД.

Расширение PDO в PHP, безусловно, можно рассматривать как DBAL, поскольку оно унифицирует доступ к различным драйверам базы данных и абстрагирует некоторые понятия, такие как параметры запроса. С другой стороны, это довольно "низкоуровневая" абстракция, в которой раскрывается большая сложность базовых систем. Введение в руководстве называет его "уровнем абстракции доступа к данным", в отличие от "полноценного уровня абстракции базы данных".

DBAL Doctrine, с другой стороны, предоставляет более богатый API для таких функций, как транзакции, и включает построитель запросов, который абстрагирует различия в синтаксисе SQL. Код, написанный для использования PDO, все равно должен будет использовать правильный синтаксис и параметры для конкретной СУБД, тогда как код, написанный для использования Doctrine DBAL, теоретически может работать на любой поддерживаемой СУБД без изменений.

Возможны даже более богатые абстракции, такие как объектно-реляционные сопоставители, такие как Doctrine ORM. Они, как правило, не упоминаются как DBAL, хотя, строго говоря, они представляют уровень, который абстрагирует базы данных.

Имейте в виду, что все это просто удобство для ссылок на вещи - нет закона, согласно которому приложение должно использовать определенный набор слоев или эти слои должны соответствовать определенным категориям. То же самое относится и к шаблонам проектирования, поэтому ваш вопрос о шаблоне Facade в общем случае не отвечает, если вы реализуете DBAL, вы можете использовать шаблон Facade в качестве руководства по его структурированию; но вы могли бы работать в контексте, где это не было полезным способом понимания архитектуры.

Другие вопросы по тегам