A DTO (Data Transfer Object)
- это объект, который определяет, как данные будут отправляться по сети или приложению.С другой стороны, Response Object
, который обычно содержит данные ответа от DTO или WebApi's or Data Access
, или любые другие ответы клиенту.
Response Object
, который обычно включает все / несколько свойств конкретного model or entity or DTO
, которыйобычно подмножество DTO
объекта.См. Пример ниже.
Объект ответа сотрудника:
public class EmployeeResponseObject
{
public int Id { get; set; }
public string Name { get; set; }
public string Designation { get; set; }
}
DTO сотрудника:
public class EmployeeDTO
{
public int Id { get; set; }
public string Name { get; set; }
public string Designation { get; set; }
public decimal Salary { get; set; }
public DateTime JoiningDate { get; set; }
public decimal Tax { get; set; }
}
Теперь выможно увидеть здесь.EmployeeResponseObject
- это подмножество EmployeeDTO
, что означает, что EmployeeResponseObject
имеет меньше свойств из EmployeeDTO
.В некоторых случаях нам не нужно передавать всю информацию конечному клиенту.Поэтому мы будем использовать EmployeeResponseObject
, чтобы получить необходимые свойства из EmployeeDTO
.Вы можете использовать LINQ
для проецирования данных на Response Object
с DTO
.
[ResponseType(typeof(EmployeeResponseObject))]
public EmployeeResponseObject GetEmployee()
{
var employee = from e in dbContext.EmployeeDTO
select new EmployeeResponseObject()
{
Id = e.Id,
Name = e.Name,
Designation = e.Designation
};
return employee;
}
Если вы используете только EmployeeDTO
для передачи информации на presentation layer/View, Webforms or ConsoleApp
, тогда ваш presentation layer/View
будет тесно связан сваш domain layer
.Любые изменения, сделанные в DTO Objects
, требуют, чтобы вы изменили presentation layer or controllers
, что не является хорошим способом сделать это.
Иногда DTO
и Response Objects
будут в точности такими же, как и для использования отдельных объектов.Это может выглядеть ненужным дублированием кода, но подумайте, когда ваш проект становится больше, особенно в больших командах, где много людей работают вместе на разных уровнях приложения.Здесь использование DTO
и separate Response object
имеет гораздо больше смысла с хорошей практикой программирования.Presentation layer/View
и domain layer
станет тесно связанным, когда вы пропустите с помощью ResponseObject/ViewModelObject
.