Подтвердить что ты не робот

В чем разница между уровнем абстракции базы данных и уровнем доступа к данным?

Я фактически застрял в 3-уровневой структуре. Я просмотрел интернет и нашел две терминологии "Уровень абстракции базы данных" и "Уровень доступа к данным".

В чем разница между этими двумя?

4b9b3361

Ответ 1

Я понимаю, что уровень доступа к данным фактически не абстрагирует базу данных, а упрощает работу с базами данных и построение запросов.

Например, уровни доступа к данным обычно имеют API, очень похожие на синтаксис SQL, которые все еще требуют знания структуры базы данных, чтобы написать:

$Users->select('name,email,datejoined')->where('rank > 0')->limit(10);

Уровни абстракции данных обычно представляют собой полноразмерные ORM (объектно-реляционные мапперы), которые теоретически предотвращают необходимость понимания любой базовой структуры базы данных или имеют какие-либо знания SQL. Синтаксис может быть примерно таким:

Factory::find('Users', 10)->filter('rank > 0');

И все объекты могут быть полностью заполнены всеми полями, возможно, соединенными с любыми родительскими или дочерними объектами, если вы установите его таким образом.

Однако эта абстракция поставляется с ценой. Я лично считаю ORM, как доктрину или движение, излишним и неэффективным. В большинстве случаев простой уровень доступа к данным будет выполнен с ручным SQL для чего-то, что требует особого внимания, вместо того, чтобы разрушать производительность вашего приложения для какого-то синтаксического сахара. Эта область - довольно жаркая дискуссия, поэтому я больше не буду вдаваться в нее.

Если вы имели в виду уровень абстракции данных base, то это будет что-то вроде строк PDO, так что ваш код может использоваться для большего числа поставщиков баз данных. Я думаю, PDO работает с MySQL, PostgreSQL и mysqli.

Ответ 2

Уровень доступа к данным = создавать, читать, обновлять, удалять (CRUD) операции, специфичные для вашего домена приложения

Data Abstraction Layer = выполняет общие операции с базой данных, такие как соединения, команды, параметры, изолирующие вас от конкретных библиотек данных поставщика, и предоставление одного высокоуровневого api для доступа к данным независимо от того, используете ли вы MySQL, Microsoft SQL Server, Oracle, DB2 и т.д...

Ответ 3

Из Wiki:

Уровень доступа к данным

Уровень доступа к данным (DAL) в компьютерном программном обеспечении представляет собой слой компьютерную программу, которая обеспечивает упрощенный доступ к данным, хранящимся в постоянное хранение какого-либо типа, такое как реляционная сущность базы данных.

Например, DAL может возвращать ссылку на объект (в терминах объектно-ориентированного программирования), в комплекте с его атрибутами вместо строки полей из таблицы базы данных. Это позволяет клиенту (или пользователь), которые должны быть созданы с более высоким уровнем абстракции. Эта модель может быть реализована путем создания класса доступа к данным методы, которые непосредственно ссылаются на соответствующий набор сохраненной базы данных процедуры. Другая реализация может потенциально получить или написать записи в файловую систему или из нее. DAL скрывает эту сложность базовый хранилище данных из внешнего мира.

Например, вместо использования таких команд, как insert, delete и обновление для доступа к определенной таблице в базе данных, классе и нескольким хранимые процедуры могут быть созданы в базе данных. Процедуры вызывается из метода внутри класса, который возвращает объект, содержащий запрошенные значения. Или, вставить, удалить и команды обновления могут выполняться в простых функциях, таких как registeruser или loginuser, хранящиеся на уровне доступа к данным.

Короче говоря, ваши основные CRUD функциональности/логики на бизнес-объектах, чтобы нажать/вытащить из слоя Persistance/Storage, здесь. В большинстве случаев вам может понадобиться только это. Отображение ORM, интерфейсы бизнес-объектов Модели и т.д.

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

Уровень абстракции базы данных - это интерфейс прикладного программирования который объединяет связь между компьютерным приложением и таких как SQL Server, DB2, MySQL, PostgreSQL, Oracle или SQLite. Традиционно все поставщики баз данных предоставляют свои собственные интерфейс, адаптированный к их продуктам, который программист приложений для реализации кода для всех интерфейсов базы данных он или она хотел бы поддержать. Сокращение уровней абстракции базы данных объем работы за счет предоставления согласованного API разработчику и скрыть специфику базы данных за этим интерфейсом как можно больше. Существует много слоев абстракции с различными интерфейсами в многочисленные языки программирования.

В принципе, это дополнительный слой абстракции, так что вы CRUD против независимых поставщиков независимых интерфейсов и меньше беспокоитесь о деталях реализации различных поставщиков баз данных. Это вам понадобится только в том случае, если вы хотите поддерживать несколько баз данных. ORM, Micro ORM, обертки, общие классы драйверов, независимо от имени и т.д., Которые занимаются установкой соединения, обработкой параметров, исполнением и т.д. Это просто дополнительный слой перед слоем Persistance/Storage. В терминологии с тремя уровнями оба этих слоя подпадают под один, поскольку они не логически раздельны.


Подводя итог, DAL о данных, DbAL - о базе данных. DAL определяет операции, работает DbAL. DAL находится за DbAL, который находится прямо за фактическим Db. DAL вызывает DbAL. DAL - хорошая вещь, чтобы отделить бизнес-логику (в модели) от логики CRUD, в то время как DbAL редко требуется (но мне это нравится). DAL - это более высокоуровневое проектирование, DbAL - архитектура и реализация более низкого уровня. Оба разделяют обязанности. ORM - это массивные структуры, которые делают и для вас. Я не уверен, как вы их разделяете при использовании ORM. Вам не нужно, поскольку ORM обрабатывают все это для вас. В идеале, я бы в любом случае имел DAL в одном проекте, а DbAL - в другом, который я бы просто назвал уровнем Persistence, поскольку нет смысла разделять Db и операции над ним.