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.
Примітки
- ↑ а б Мартін Фаулер (2010). Data Transfer Object. Patterns of Enterprise Application Architecture. Отримано з http://martinfowler.com/eaaCatalog/dataTransferObject.html.