Our software architect is mandating all API Actions have their own Response Class, since every Response can be slightly difference. So we basically wrap the Product DTO in a Base Response class, and slightly customize if needed. Is this good architectural practice? I started programming and it Seems kind of repetitive. Also, what is a nicer optimal alternative for this?
Product Class:
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; }
}
Individual Response:
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;}
}
 
    