Чем отличается реализация Table Data Gateway от Active Record? - PullRequest
8 голосов
/ 01 января 2012

Проще говоря, о реализации Data Data Gateway (TDG): вы создаете отдельный класс TDG, который содержит SQL для операций CRUD с конкретной таблицей.Таким образом, ваши модели взаимодействуют не напрямую с источником данных (например, с базой данных), а через эти абстрактные - классы TDG.Таким образом, это просто подход для создания другого уровня абстракции, и это просто оболочка для связи с базой данных - получать и изменять данные.ИМХО классы TDG не должны содержать членов, только методы.Вот хорошая схема, которая визуализирует использование TDG паттерна .При использовании подхода TDG SQL следует переместить из классов модели в классы источника данных (TDG).И все данные, которые я получаю из БД через классы TDG, хранятся в членах моей модели.

А как насчет реализации активной записи?Если бы я объединил доступ к данным и мой класс модели в один класс модели, я бы реализовал активную запись?Мне не удалось найти четкого различия или того, как эти шаблоны выглядят в PHP и отличаются друг от друга.

Часто у меня есть один класс одноэлементной базы данных, а затем отдельный класс модели для каждой таблицы базы данных.Каждый класс модели имеет CRUD + несколько пользовательских (count, avg и т. Д.) Операций.В некоторых классах есть члены для сохранения результатов CRUD или пользовательских операций - это делается при необходимости.Может ли этот подход быть идентифицирован как активная запись?Кроме того, если бы я переместил SQL из моих классов моделей в классы TDG, это был бы шлюз таблиц данных?

1 Ответ

14 голосов
/ 01 января 2012

С http://martinfowler.com/eaaCatalog/index.html

Шлюз данных таблицы: объект, который действует как шлюз (466) для таблицы базы данных. Один экземпляр обрабатывает все строки в таблице.

enter image description here

Активная запись: объект, который упаковывает строку в таблицу или представление базы данных, инкапсулирует доступ к базе данных и добавляет логику домена к этим данным.

enter image description here

Очевидное основное отличие состоит в том, что TDG обертывают доступ к таблице и возвращают только данные строки, в то время как AR оборачивают доступ к строке в таблице и добавляет бизнес-логику к этому.

Если у вас очень низкое несоответствие импеданса, предпочтительнее иметь TDG, потому что с AR ваши бизнес-объекты / доменные объекты следуют структуре в базе данных, которая обычно не соответствует моделированию ваших доменных объектов. Ряд может знать, как сохранить себя, но Человек не должен знать. В конечном счете, это более удобно для разделения логики постоянства и логики домена.

Что касается вашего объекта Singleton DB, посмотрите на Существует ли сценарий использования для синглетонов с доступом к базе данных в PHP? .

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