DTO — Data Transfer Objects
- ·
-
Дайте им то, что они просят…
Информация/данные важны как в реальной жизни, так и в программировании. Сохраняйте ее простой и ясной при передаче кому-то! Требуются простые контейнеры данных и ничего более, поскольку люди заинтересованы только в простой/чистой/конкретной информации.
Дайте мне данные; без условий; без вопросов; без логики, пожалуйста!
В реальной жизни:
- Когда к нам приходят маркетинговые или продажные специалисты, они вручают нам свою визитную карточку (которая содержит их имя и контактную информацию).
- Заботит ли нас действительно, какая фабрика напечатала данные или как это произошло? Нет, потому что нас интересует только информация, содержащаяся на визитной карточке.
- Здесь визитная карточка является простым контейнером данных (объектом передачи данных) для нас, который используется для передачи необходимой информации нам.
В программировании приложений:
Сохраняйте слой базы данных/сети (фактический поставщик данных) в изоляции, тем самым отделяя проблемы, связанные с данными, от слоев пользовательского интерфейса и бизнес-логики.
- Модели, необходимые на уровне приложения/UI, не должны заботиться о том, используется ли Core Data, Realm, Sqlite или удаленный источник данных.
- Всегда относитесь к пользовательскому интерфейсу и приложению как к «глупому» слою, потому что он заинтересован только в простых/ясных данных, которые можно отобразить или использовать для своих целей.
- Здесь такие простые контейнеры/объекты данных называются «объекты передачи данных» (Data Transfer Objects).
- Очевидно, будет необходимо создать методы-трансляторы для преобразования сущностей/моделей базы данных в такие простые объекты передачи данных.
- Например, в приложении для опросов, интерфейс анкеты не должен беспокоиться о том, откуда были получены вопросы и их варианты ответов (из файла JSON/XML, локальной БД или удаленного API)? Макет анкеты просто заинтересован в чтении простых источников данных и в их отображении.
Преимущества DTOs:
- Скрытие сложности уровня данных.
- Простота для тестирования UI/Unit путем имитации (mocking) DTO и внедрения их в качестве зависимости.
- Нет необходимости напрямую работать с некорректными данными или ошибками, связанными с сетью или базой данных.
Резюме
DTO (Data Transfer Object) (POJO в Java, POSO в Swift) часто недооценивают, однако их истинная ценность раскрывается в крупных приложениях, сложных кодовых базах и больших командах.
Источник: https://medium.com/@ParthContractor/dto-data-transfer-objects-3848a45a6d6