Danyloff

DTO — Data Transfer Objects


  • ·

· ·
·

Дайте им то, что они просят…

Информация/данные важны как в реальной жизни, так и в программировании. Сохраняйте ее простой и ясной при передаче кому-то! Требуются простые контейнеры данных и ничего более, поскольку люди заинтересованы только в простой/чистой/конкретной информации.

Дайте мне данные; без условий; без вопросов; без логики, пожалуйста!

В реальной жизни:

  • Когда к нам приходят маркетинговые или продажные специалисты, они вручают нам свою визитную карточку (которая содержит их имя и контактную информацию).
  • Заботит ли нас действительно, какая фабрика напечатала данные или как это произошло? Нет, потому что нас интересует только информация, содержащаяся на визитной карточке.
  • Здесь визитная карточка является простым контейнером данных (объектом передачи данных) для нас, который используется для передачи необходимой информации нам.

В программировании приложений:

Сохраняйте слой базы данных/сети (фактический поставщик данных) в изоляции, тем самым отделяя проблемы, связанные с данными, от слоев пользовательского интерфейса и бизнес-логики.

  • Модели, необходимые на уровне приложения/UI, не должны заботиться о том, используется ли Core Data, Realm, Sqlite или удаленный источник данных.
  • Всегда относитесь к пользовательскому интерфейсу и приложению как к «глупому» слою, потому что он заинтересован только в простых/ясных данных, которые можно отобразить или использовать для своих целей.
  • Здесь такие простые контейнеры/объекты данных называются «объекты передачи данных» (Data Transfer Objects).
  • Очевидно, будет необходимо создать методы-трансляторы для преобразования сущностей/моделей базы данных в такие простые объекты передачи данных.
  • Например, в приложении для опросов, интерфейс анкеты не должен беспокоиться о том, откуда были получены вопросы и их варианты ответов (из файла JSON/XML, локальной БД или удаленного API)? Макет анкеты просто заинтересован в чтении простых источников данных и в их отображении.

Преимущества DTOs:

  1. Скрытие сложности уровня данных.
  2. Простота для тестирования UI/Unit путем имитации (mocking) DTO и внедрения их в качестве зависимости.
  3. Нет необходимости напрямую работать с некорректными данными или ошибками, связанными с сетью или базой данных.

Резюме

DTO (Data Transfer Object) (POJO в Java, POSO в Swift) часто недооценивают, однако их истинная ценность раскрывается в крупных приложениях, сложных кодовых базах и больших командах.

Источник: https://medium.com/@ParthContractor/dto-data-transfer-objects-3848a45a6d6


Так же интересно

D из SOLID с примерами на PHP

Принцип инверсии зависимостей (Dependency Inversion Principle) - это один из пяти принципов SOLID, который гласит, что модули верхнего уровня не должны зависеть...

Шаблон Active Record с примерами на PHP

Active Record - это шаблон проектирования, который используется для работы с базами данных. Он позволяет представлять данные в виде объектов и работать с ними,...