2009-07-06 6 views
36

Изучив Java в школе, я хорошо знаком с DAO-образцом (Data access object). Однако на работе я использую .NET. В .NET часто говорят о DAL (Data Access Layer). Для меня их цель кажется весьма схожей. Итак, вопрос в том, что DAO и DAL в принципе одно и то же? Является ли термин DAL только составленным, чтобы его не смешивали с Data Access Objects?В чем разница между DAO и DAL?

+1

Я всегда думал, что DAL как слой абстракции данных – davidsleeps

ответ

57

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

DAL - это архитектурный термин, DAO - это детали дизайна.

+4

Предположим, у меня есть интерфейс DAO, который имеет такие методы, как getCustomer(). Интерфейс реализован SqlServerDAO-классом. Когда getCustomer() вызывается, SqlServerDAO извлекает данные из БД, создает и возвращает объект Customer. В этом случае DAL состоит из DAO-интерфейса и SqlServerDAO-класса, правильно? – simoraman

+0

Это звучит прямо для меня. –

+6

+1 для «DAL - архитектурный термин, DAO - это детализация дизайна». – svirk

11

Уровень доступа к данным будет содержать много объектов доступа к данным.

Основная задача - отделить бизнес-логику от логики и реализации базы данных.

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

Изменения структуры базы данных, DAO, хранимых процедур или даже типа базы данных не должны вносить изменения в бизнес-логику, и это зависит от развязки, предоставляемой DAL.