@ftftftftftftff
frontend developer

Как свести ответы сервисов к одной сущности asp net core web api?

Я хочу выделить сущность ответа сервиса чтобы ее передавать в контроллер, а затем делать из нее объект IActionResult, но не могу понять как сделать второе
Вот сам класс сущности ответа:
namespace OnlineStore.Domain.Response
{
    public class BaseResponse<T> : IBaseResponse<T>
    {
        public string Description { get; set; }
        public StatusCode StatusCode { get; set; }
        public T Data { get; set;}


    }

    public interface IBaseResponse<T> 
    {
        T Data { get; set; }   
    }
}


где StatusCode у меня ялвяется Enum такого вида(потом он станет больше):
namespace OnlineStore.Domain.Enum
{
    public enum StatusCode
    {
        OK = 200,
        NotContent=204,
        InternalServerError = 500
    }
}

И методы сервиса у меня бы работали примерно таким образом:
public async Task<IBaseResponse<Product>> GetProductById(int id) { 
            var response = new BaseResponse<Product>();
            try
            {
                var product = await _productRepository.GetById(id);
                if (product == null) 
                {
                    response.Description = $"There is no product with this id: {id}";
                    response.StatusCode = StatusCode.NotContent;
                    return response;
                }
                response.Data = product;
                return response;
            }
            catch (Exception ex)
            {
                return new BaseResponse<Product>()
                {
                    Description = $"[GetProducts]: {ex.Message}",
                    StatusCode = StatusCode.InternalServerError
                };
            }
        }

И вот я хочу чтобы все сервисы возвращали в контроллер объект IBaseResponse и потом я просто создавал объект IActionResult, данные для которого я бы брал из этого объекта.Как мне реализовать метод, который будет брать IBaseResponse и возвращать IActionResult беря данные из объекта вернувшегося из сервиса. Объясните мне как лучше реализовывать такие вещи например в слоистой архитектуре приложения или как еще можно
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Зачем везде возвращать IBaseResponse? В нем описание и статус код - они повторяют HTTP метод работы. Разницы между ними никакой. Это явное протекание абстракций.
Лучше сделать так:
1. В контроллере вызываешь GetProductById.
2. Если вернул null, то создаешь ответ 404 There is not product with this id
3. Если возникла ошибка - возвращаешь 500
4. В противном случае возвращаешь ответ

Не смешивай логику и представление
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы