Объекты передачи данных в PHP, множество классов с одинаковым контекстным именем - PullRequest
7 голосов
/ 28 декабря 2010

Ну, я только что понял, что есть этот шаблон DTO.Интересно, полезны ли они?

Я имею в виду, должен ли я сопоставить все свои доменные объекты с соответствующими им объектами DTO и назначить их для просмотра вместо самих доменных объектов?Тогда у меня было бы много классов с одинаковым контекстным именем.

Как:

  • Пользователь (объект домена),
  • UserDTO,
  • UserMapper или UserPersistenceFactory,
  • UserFactory,
  • UserSelectionFactory,
  • UserUpdateFactory,
  • UserAssembler (для отображения DTO),
  • UserCollection,
  • UserViewHelper (возможно)

и т.д ...

1 Ответ

3 голосов
/ 28 декабря 2010

Как правило, DTO может помочь вам отделить проблемы данных базы данных от проблем данных объектов, которые используют данные.Вы можете поместить проверку в DTO, чтобы убедиться, что конкретный член соответствует определенному формату.Таким образом, этот дополнительный код не загромождает объекты, которым все равно, что нужно базе данных.

Кроме того, DTO становятся мощными при косвенном обращении к базе данных.Однако это имеет гораздо большее значение в языках, которые могут автоматически генерировать DTO.

В этом и заключается самый мощный и неотразимый аспект DTO.Это может быть легко сгенерировано автоматически.Это также верно в PHP, однако для этого требуются дополнительные инструменты.

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

HOWEVER

В приложении, в котором есть объекты, которые не отражают базу данных напрямую, DTO снова получает полномочия.Например: приложение, в котором есть люди, состоящие из большого количества метаинформации, такой как адреса, личные данные и кредитные карты, может использовать DTO для всех отдельных данных, а затем использовать объект Person для обработки всего использования этих данных.Таким образом, транзакция может быть передана по кредитной карте DTO напрямую, без суеты и суеты.Затем он может получить доступ к любым данным с карты.Однако, как только вы захотите поместить адрес в DTO для кредитной карты, у вас больше не будет строгого DTO.

...