Уровень абстракции базы данных - Что это? - PullRequest
0 голосов
/ 02 марта 2019

У меня есть несколько основных вопросов о слоях абстракции базы данных (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 Ответ

0 голосов
/ 02 марта 2019

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

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

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

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

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

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

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

...