Net Core: создать класс ответа для каждого действия API? - PullRequest
0 голосов
/ 22 сентября 2019

Наш архитектор программного обеспечения требует, чтобы все действия API имели свой собственный класс ответа, поскольку каждый ответ может немного отличаться.Таким образом, мы в основном помещаем Product DTO в класс Base Response и немного настраиваем при необходимости.Это хорошая архитектурная практика?Я начал программировать, и это кажется довольно повторяющимся.Кроме того, что является лучшей альтернативой для этого?

Класс продукта:

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

BaseResponse:

public class BaseResponse<T>
{
    [Required, ValidateObject]
    public T Body { get; set; }
    public bool HasError { get; set; }
    public string Error { get; set; }
}

Индивидуальный ответ:

public class CreateProductResponse : BaseResponse<ProductDto>
{
}

public class DeleteProductResponse : BaseResponse<int>
{
}

public class GetAllProductResponse : BaseResponse<IEnumerable<ProductDto>>
{
    public int Count { get; set;};
}

public class GetProductResponse : BaseResponse<ProductDto>
{
}

public class UpdateProductResponse : BaseResponse<ProductDto>
{
    public date DateUpdate { get; set;}
}

Ответы [ 2 ]

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

Трудно сказать хорошую / плохую архитектурную практику, увидев этот кусок кода.в нашем случае мы используем приведенный ниже шаблон и находим его разумным

public class BaseResponse
{
    public bool HasError { get; set; }
    public string Error { get; set; }
}   


public class CreateProductResponse : BaseResponse
{
 ---
}

public class CreateProductDetailResponse : CreateProductResponse
{
 ---
}
0 голосов
/ 22 сентября 2019

По крайней мере, с текущим примером, я бы сказал, что он немного продуман.Есть много производных классов, которые не имеют дополнительных собственных свойств.Вероятно, в будущем тот же шаблон останется.

Лучшим решением было бы сделать BaseResponse в качестве интерфейса для лучшей расширяемости для реализации одних и тех же свойств нескольких различных интерфейсов.Ниже приведена более подробная информация.

https://softwareengineering.stackexchange.com/questions/382882/why-inherit-a-class-and-not-add-properties

...