DTO

Data Transfer Object (DTO) — один із шаблонів проєктування, який використовують для передачі даних між підсистемами програми. Спонукою до використання таких об'єктів є те, що передача даних між процесами зазвичай відбувається за допомогою віддалених інтерфейсів (наприклад, веб-сервісів), де кожен виклик це дорога дія.[1] Через те, що більшість вартості кожного виклику пов'язана з часом пересилання в обидва боки між клієнтом і сервером, один зі способів зменшити кількість викликів це використати об'єкт, який агрегує дані, які інакше були б передані кількома викликами.[1]

Концепція

  • Передача даних: DTO структурує дані для передачі мережею або між компонентами, що спрощує комунікацію та робить код зрозумілішим.
  • Спрощення: Замість кількох окремих викликів та об'єктів, один DTO може передавати всі необхідні дані одним викликом.
  • Зменшення помилок: Використання DTO допомагає уникнути помилок, пов'язаних із серіалізацією та десеріалізацією складних об'єктів.
  • Відсутність бізнес-логіки: На відміну від бізнес-об'єктів, DTO не повинен містити жодної поведінки чи логіки, він лише передає дані.
  • Ефективність: DTO може бути оптимізований для передачі лише тих даних, які дійсно потрібні, що підвищує продуктивність, особливо при роботі з мережевими викликами.

Data Transfer Object не повинні містити ніякої логіки, але можуть містити механізми серіалізації/десереалізації для передавання даних по дроту.

Приклад

Нехай потрібно створити нового користувача. Щоб не навантажувати функції великою кількістю аргументів, можна створити об'єкт, який міститиме значення в собі, та передати його

public class CreateUserDTO
{
    public string Name { get; set; }
    public string Surname { get; set; }
}

Типи DTO

У багаторівневих системах заведено відрізняти DTO які працюють із рівнем презентації. Так об'єкти, які формують вигляд називають ViewModel, а ті, що являються результатом дій користувача (взаємодія із графічним інтерфейсом, заповнена форма тощо) — InputModel.

Примітки

  1. а б Мартін Фаулер (2010). Data Transfer Object. Patterns of Enterprise Application Architecture. Отримано з http://martinfowler.com/eaaCatalog/dataTransferObject.html.

Див.також