Чем отличаются шаблоны сопоставления данных, шлюз табличных данных (шлюз), объект доступа к данным (DAO) и шаблоны репозитория?

131
задан TylerH 10 March 2017 в 17:10
поделиться

3 ответа

Ваш пример условий; DataMapper, DAO, DataTableGateway и Repository имеют схожую цель (когда я использую один, я ожидаю получить обратно объект Customer), но разные намерения / значения и результирующая реализация.

A Repository " действует как коллекция, за исключением более сложных возможностей запросов » [ Evans, Domain Driven Design ] и может рассматриваться как « объекты фасада памяти » ( Обсуждение репозитория )

A DataMapper «перемещает данные между объектами и базой данных, сохраняя их независимость друг от друга и от самого средства отображения» ( Fowler, PoEAA, Mapper )

A TableDataGateway равно " шлюз (объект, инкапсулирующий доступ к внешней системе или ресурсу) к таблице базы данных. Один экземпляр обрабатывает все строки в таблице "( Fowler, PoEAA, TableDataGateway )

A DAO " отделяет клиентский интерфейс ресурса данных от его механизмов доступа к данным / адаптирует API доступа к конкретному ресурсу данных к общему клиентскому интерфейсу «, позволяя » механизмам доступа к данным изменяться независимо от кода, который использует данные » ( Sun Blueprints )

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

95
ответ дан 24 November 2019 в 00:25
поделиться

You have a good point. Pick the one you are most familiar with. I like to point out few things that may help clarify.

The Table Data Gateway is used mainly for a single table or view. It contains all the selects, inserts, updates, and deletes. So Customer is a table or a view in your case. So, one instance of a table data gateway object handles all the rows in the table. Usually this is related to one object per database table.

While Data Mapper is more independent of any domain logic and is less coupled (although I believe either there is coupling or not coupling). It is merely a intermediary layer to transfer the data between objects and a database while keeping them independent of each other and the mapper itself.

So, typically in a mapper, you see methods like insert, update, delete and in table data gateway you will find getcustomerbyId, getcustomerbyName, etc.

Data transfer object differs from the above two patterns, mainly because it is a distribution pattern and not a data source pattern as above two patterns. Use it mainly when you are working with remote interface and need to make your calls less chatty as each call can get expensive. So usually design an DTO which can be serialized over wire that can carry all the data back to the server for applying further business rules or processing.

I am not well versed in repository pattern as I did not get a chance to use till now but will be looking at others answers.

15
ответ дан 24 November 2019 в 00:25
поделиться

В мире программного обеспечения (по крайней мере, мне так кажется) существует тенденция придумывать новые имена для хорошо известных старых вещей и шаблонов. А когда у нас есть новая парадигма (которая, возможно, немного отличается от уже существующих), она обычно сопровождается целым набором новых имен для каждого уровня. Таким образом, «бизнес-логика» становится «уровнем сервисов» только потому, что мы говорим, что делаем SOA, а DAO становится репозиторием только потому, что мы говорим, что выполняем DDD (и каждый из них на самом деле не является чем-то новым и уникальным, но опять же: новые имена за уже известные концепции, собранные в одной книге). Поэтому я не говорю, что все эти современные парадигмы и акронимы означают ТОЧНО одно и то же, но вы действительно не должны быть слишком параноиками по этому поводу. В основном это одни и те же модели, только из разных семейств.

28
ответ дан 24 November 2019 в 00:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: