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

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

каковы различия между ними?

3 ответов


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

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

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

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

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

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

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

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


Data Access Layer= создание, чтение, обновление, удаление (CRUD) операций, специфичных для вашего домена приложения

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


Из Вики:

Уровень Доступа К Данным

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

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

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

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

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

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

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


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