Какова цель уровня доступа к данным?

Я начал проект давным-давно и создал в своем решении проект Уровень доступа к данным, но никогда ничего в нем не разрабатывал. Каково назначение уровня доступа к данным? Есть ли хорошие источники, из которых я мог бы узнать больше об уровне доступа к данным?


person Bryan Roth    schedule 12.09.2008    source источник


Ответы (10)


В двух словах: Слабая связь

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

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

person swilliams    schedule 12.09.2008
comment
› Таким образом, если вам нужно изменить хранилище данных, вам не придется переписывать все целиком. Вы все действительно собираетесь менять хранилища данных? Если вы не планируете это с самого начала, я в этом сомневаюсь. - person Jonathan Allen; 13.09.2008
comment
Ну, в некоторых проектах я это делаю постоянно. В моей среде разработки я использую SQLite, а в производстве — MySQL. Однако структура, которую я использую, упрощает эту задачу (Pylons). - person swilliams; 13.09.2008
comment
Я помню множество примеров, в которых вам может понадобиться использовать Oracle/MySql/SQL Server вместо SQLServer/Oracle/MySQL в качестве хранилища данных, но, по моему опыту, это никогда не происходит из-за инструментов и лицензирование является основой большинства коммерческих проектов. - person indra; 24.03.2011
comment
А как насчет серьезных изменений в схеме базы данных как причины такой слабой связи? например предположим, что вы переходите с нормализованных таблиц на таблицы EAV в некоторых частях базы данных. - person Buttle Butkus; 25.03.2015

Существует две основные цели уровня доступа к данным.

  1. Абстрагируйте фактический механизм базы данных или другое хранилище данных, чтобы ваши приложения могли переключаться с использования, скажем, Oracle на использование сервера MS SQL.

  2. Абстрагируйте логическую модель данных таким образом, чтобы ваш бизнес-уровень был отделен от этих знаний и не зависел от них. Предоставление вам возможности изменять логическую модель данных, не влияя на бизнес-уровень.

Большинство ответов здесь указали первую причину. На мой взгляд, гораздо важнее второе. По сути, ваш бизнес-уровень не должен знать об используемой логической модели данных. Сегодня с ORM и Linq № 2, кажется, уходит в окно, и люди склонны забывать (или не в состоянии увидеть тонкие грани, которые существуют и должны существовать) о № 2.

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

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

GetOrdersForCustomer(42)

И он возвращает именно те данные, которые ему нужны, не зная, какие таблицы хранят эту информацию или существуют отношения и т. д.

Я написал статью в своем блоге, в которой более подробно.

Назначение и функции уровня доступа к данным< /а>

person Shiv Kumar    schedule 21.11.2010
comment
обновите ссылку. больше не доступен - person KNU; 26.03.2014

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

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

Имейте в виду, что DAL также может быть очень контрпродуктивным. Если вы строите систему, в которой скорость доступа к данным имеет решающее значение, отделение ее от бизнес-логики может сделать невозможными некоторые жизненно важные оптимизации.

person Jonathan Allen    schedule 12.09.2008
comment
Что я сделал, так это реализовал доступ к данным в моем BAL. - person Bryan Roth; 13.09.2008
comment
LMAO, я имел в виду BLL (уровень бизнес-логики). - person Bryan Roth; 16.09.2008

Уровень доступа к данным следует идее «разделения задач», согласно которой вся логика, необходимая для вашей бизнес-логики для взаимодействия с вашим уровнем данных (базой данных), изолирована в одном наборе классов (слое). Это позволяет вам более легко изменить внутреннюю технологию физического хранения данных (например, перейти от XML-файлов к базе данных или от SQL Server к Oracle или MySQL), не оказывая большого влияния (и, если все сделано правильно, с нулевым влиянием) на ваши бизнес-логика.

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

person Scott Dorman    schedule 12.09.2008
comment
› Это позволяет вам более легко изменить внутреннюю технологию физического хранения данных (например, перейти от XML-файлов к базе данных или от SQL Server к Oracle или MySQL). Я сомневаюсь в этом. - person Jonathan Allen; 13.09.2008
comment
@Grauenwolf: хотя смена баз данных происходит не так часто, разделение вещей по-прежнему является хорошим способом ведения дел, что более распространено на практике, вы можете изменить способ доступа к своим текущим данным или настроить некоторые функции и получить их. все в одном месте. - person Slartibartfast; 13.09.2008

DAL должен абстрагировать вашу базу данных от остальной части вашего проекта — по сути, в любом коде, кроме DAL, не должно быть SQL, и только DAL должен знать структуру базы данных.

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

person Guy Starbuck    schedule 12.09.2008
comment
Что, если я поставлю свой доступ к данным в свой BAL? - person Bryan Roth; 13.09.2008

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

person Esteban Araya    schedule 12.09.2008

Уровень доступа к данным используется для абстрагирования хранения и извлечения данных от их представления. Вы можете больше узнать об этом виде абстракции в 1994 году в Шаблоны проектирования< /а>

person Community    schedule 12.09.2008

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

Преимущества:

  • Базовое хранилище может измениться (например, перейти с Oracle на MSSQL), и вам нужен способ локализовать эти изменения.
  • Изменения схемы - см. выше
  • Вам нужен способ запуска без подключения к базе данных (демонстрационный режим): добавьте сериализацию/десериализацию файлов в DAL.
person theschmitzer    schedule 12.09.2008

Я рекомендую вам прочитать здесь: http://msdn.microsoft.com/en-us/practices/default.aspx Использование DAL поможет вам изолировать доступ к данным от вашей презентации и бизнес-логики. Я часто использую его, чтобы легко менять (путем отражения и динамической загрузки сборок) поставщиков данных.

Почитайте, там много полезной информации.

Кроме того, загляните в блок доступа к данным, если вы планируете использовать .СЕТЬ. Это может быть большой помощью.

person GEOCHET    schedule 12.09.2008

Кое-что, что не было поднято, но я подумал, что я хотел бы добавить, что наличие DAL позволяет вам улучшить безопасность вашей системы. Например, БД и DAL могут работать на серверах, недоступных для общественности, в то время как бизнес-логика может работать на общедоступном сервере, так что общедоступный сервер не может запускать необработанный SQL в БД. Это может помочь смягчить значительный ущерб, если общедоступный сервер будет скомпрометирован.

person Christopher Williams    schedule 13.05.2018