Архитектурная разница между шлюзом табличных данных и объектом доступа к данным - PullRequest
3 голосов
/ 30 июня 2010

Может ли кто-нибудь описать основное различие между шлюзом табличных данных (TDG) и объектом доступа к данным (DAO)?

TDG может работать со всеми строками для этой таблицы, кроме DAO (DAO может сохранять, удалять указанный объект, но также может выполнять операции со всей таблицей)

Привет

1 Ответ

3 голосов
/ 01 июля 2010

На мой взгляд, основное отличие состоит в том, что TDG ориентирован на базу данных (постоянство), а DAO ориентированы на экземпляр бизнес / объекта.

TDG действует как фасад (своего рода) для таблицы базы данных - иориентированный на стол (измените таблицу, и вы бы изменили TDG).

DAO - это абстрактное представление, обычно представляющее конкретный экземпляр объекта (не всю таблицу, с точки зрения таблицы - фактически они вообще не ориентированы на постоянство);DAO часто строятся вокруг бизнес-концепций.

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

DAO будут использоваться в более «нормальных» ситуациях, когда вы создаете новое решение, ориентированное на бизнес / логику, с нуля.

Пример TDG (псевдокод)

Отправной точкой будет база данных, например: таблица с 3 строками данных:

ContactsTable
--------------------
Id | Name | Ph 
--------------------
01 | Bob  | 192837
02 | Joe  | 564738
03 | Ali  | 483957

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

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

Class ContactTableRecord
[
   Id
   Name
   Ph
]

Итак, теперь у вас есть представление данных в коде;Ваше приложение может использовать данные, как ему нравится.Но если структура базы данных изменится, вы также измените слой кода для соответствия - в этом случае класс ContactTableRecord.Таким образом, проектные решения, касающиеся представления данных, определяются источником данных.

Пример DAO (псевдокод)

Сначала вы должны разработать свою систему на основе концепций -как клиент, лицензии, разрешения, покупки, одобрения, местоположения и т. д .;тогда вы (вероятно) смоделируете отношения между ними.Допустим, у нас есть некоторые классы в нашей основной бизнес-логике, которые мы определили как:

Class Customer
[
   Id
   Name
   Ph
   Purchases
   ListAllPurchases()
   SendInvoice()
]

Class Purchase
[
   Id
   ItemDescription
   Customer
   DateOfPurchase
]

До этого момента мы не обращались к каким-либо данным, мы можем даже не знать, каким будет наш источник данных.,Если мы думаем о будущем, мы абстрагируем доступ к данным, используя Dependancy Inversion (DI).

Центральное значение для DI имеет интерфейс между BL и DAL;мы могли бы указать интерфейс, который включал бы что-то вроде этого:

GetPurchaseDetails() - returns a PurchaseDetails object

Определенный нами объект PurchaseDetails, который мы намереваемся передать между BL и DAL - или между нашим приложением и другим приложением,DAO - это представление данных, из которых состоит Покупка и Клиент.Поскольку его центр тяжести - BL, он не ограничен структурой базы данных (на самом деле мы даже не дошли до этого - нам не нужно для существования DAO).

// This is our DAO: 
Class PurchaseDetails
[
   CustomerId
   Name
   Ph
   PurchaseId
   ItemDescription
   DateOfPurchase
]

Другое мнение см .: Шлюз табличных данных и объект доступа к данным

...