Разница между DTO и объектом ответа? - PullRequest
0 голосов
/ 23 сентября 2019

В чем разница между объектом ответа и DTO в программной архитектуре?Скажем, я хочу получить список продуктов в каталоге.

Если это ProductDTO, чем отличается класс Product Response?Является ли Product Response, как правило, просто оболочкой с датой-временем, журналом ошибок или guid, или в чем главное отличие?Если нет точных или множественных ответов, хотелось бы услышать главные причины в отрасли.

public class ProductDto
{
    public int ProductId { get; set;},
    public string ProductName { get; set;},
    public string ProductDescription { get; set;},
    public float SalesAmount { get; set;}
}

Я пытался найти эти ответы, у них не было конкретного ответа на этот вопрос,

Повторное использование DTO для различных типов запросов / ответов против четкости того, что требуется / что должно быть возвращено

Объекты данных для каждого уровня (DTO против сущности против объектов ответа)

Обновление:

Попытка подтвердить ответ.Кажется, что ответ Рахула отвечает на разницу между объектом Domain и DTO.Thought Response является оберткой вокруг DTO, не уверен, что это правда -

http://themoderndeveloper.com/the-modern-developer/requesting-a-response/

Опубликовано здесь:

https://softwareengineering.stackexchange.com/questions/398783/what-is-difference-between-dto-and-response-object

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Из того, что я видел, объект Response может содержать поле Status поверх DTO, которое указывает, был ли запрос успешным;или если нет, то почему это не удалось.

Но я не совсем уверен, что это задокументированная норма.

0 голосов
/ 23 сентября 2019

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.

...