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

StackOverflow https://stackoverflow.com/questions/2838661

Вопрос

Я на самом деле застрял в трехуровневой структуре. Я занимался Интернетом и нашел две терминологии «База данных абстракции базы данных» и «Слой доступа к данным».

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

Другие советы

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

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

Из вики:

Слой доступа к данным

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

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

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

Короче говоря, ваш основной Crud Функциональные возможности / логики На бизнес объектам подтолкнуть / тянуть от настойчивости / слоя хранения здесь. Для большинства случаев вы можете захотеть только это. ORM отображение, интерфейсы бизнес-объектов модели и т. Д. падать здесь.

Слой абстракции базы данных

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

В основном, это дополнительный слой абстракции, так что вы Грубый против независимых интерфейсов поставщика и беспокоиться о деталях реализации различных поставщиков баз данных. Вам понадобится это только в том случае, если вы хотите поддержать более одной базы данных. ОРМС, микро ОРМ, обертки, универсальные классы драйверов, независимо от имени и т. Д. Это касается создания подключения, обработанием параметров, выполнением и т. Д. Это просто дополнительный слой перед перспективом / слоем хранения. В 3 уровнях терминологии обе эти слои попадают под один, поскольку они не логически разделяются.


Подводя итоги, DAL о данных, DBAL относится к базе данных. DAL определяет операции, DBal работает. Дал сидит за Двалом, который находится за фактической БД. Дал звонит ДБАН. DAL - это хорошая вещь для отделения деловой логики (в модели) от Crud Logics, в то время как DBal редко требуется (но я люблю его). DAL - это более высокое сопоставление дизайна, ДАНЧ - более низкий уровень архитектуры и реализации. Оба отделяют обязанности. ОРМ - это массивные структуры, которые оба для вас. Я не уверен, как вы их отделяете при использовании ОРМ. Тебе не нужно, так как ОРМ обрабатывает все, что для вас. В идеале я бы в любом случае имел в любом случае Dal в одном проекте, и ДБЛ в другом, который я бы просто позвонил настойчивому слою, поскольку нет смысла разделяют дБ и операции на нем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top