ServiceStack Запрос DTO дизайн

Я разработчик .Net, используемый для разработки веб-приложений на Microsoft Technologies. Я пытаюсь научиться понимать подход REST для веб-сервисов. Пока я люблю инфраструктуру ServiceStack.

Но иногда я нахожу, что пишу сервисы так, как я привык к WCF. Итак, у меня есть вопрос, который меня беспокоит.

У меня есть 2 запроса DTO, так что 2 службы, подобные этим:

[Route("/bookinglimit", "GET")]
[Authenticate]
public class GetBookingLimit : IReturn<GetBookingLimitResponse>
{
    public int Id { get; set; }
}
public class GetBookingLimitResponse
{
    public int Id { get; set; }
    public int ShiftId { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public int Limit { get; set; }

    public ResponseStatus ResponseStatus { get; set; }
}

[Route("/bookinglimits", "GET")]
[Authenticate]
public class GetBookingLimits : IReturn<GetBookingLimitsResponse>
{      
    public DateTime Date { get; set; }
}
public class GetBookingLimitsResponse
{
    public List<GetBookingLimitResponse> BookingLimits { get; set; }
    public ResponseStatus ResponseStatus { get; set; }
}

Как видно из этих запросов DTO, у меня есть похожие DTO запроса почти для каждой услуги, и это, похоже, не СУХОЙ.

Я пытался использоватьGetBookingLimitResponse класс в списке внутриGetBookingLimitsResponse по этой причинеResponseStatus внутриGetBookingLimitResponse класс дублируется в случае, если у меня есть ошибка наGetBookingLimits оказание услуг.

Также у меня есть реализации службы для этих запросов, таких как:

public class BookingLimitService : AppServiceBase
{
    public IValidator<AddBookingLimit> AddBookingLimitValidator { get; set; }

    public GetBookingLimitResponse Get(GetBookingLimit request)
    {
        BookingLimit bookingLimit = new BookingLimitRepository().Get(request.Id);
        return new GetBookingLimitResponse
        {
            Id = bookingLimit.Id,
            ShiftId = bookingLimit.ShiftId,
            Limit = bookingLimit.Limit,
            StartDate = bookingLimit.StartDate,
            EndDate = bookingLimit.EndDate,
        };
    }

    public GetBookingLimitsResponse Get(GetBookingLimits request)
    {
        List<BookingLimit> bookingLimits = new BookingLimitRepository().GetByRestaurantId(base.UserSession.RestaurantId);
        List<GetBookingLimitResponse> listResponse = new List<GetBookingLimitResponse>();

        foreach (BookingLimit bookingLimit in bookingLimits)
        {
            listResponse.Add(new GetBookingLimitResponse
                {
                    Id = bookingLimit.Id,
                    ShiftId = bookingLimit.ShiftId,
                    Limit = bookingLimit.Limit,
                    StartDate = bookingLimit.StartDate,
                    EndDate = bookingLimit.EndDate
                });
        }


        return new GetBookingLimitsResponse
        {
            BookingLimits = listResponse.Where(l => l.EndDate.ToShortDateString() == request.Date.ToShortDateString() && l.StartDate.ToShortDateString() == request.Date.ToShortDateString()).ToList()
        };
    }
}

Как вы видите, я также хочу использовать функцию проверки здесь, поэтому мне нужно написать классы проверки для каждого запроса DTO, который у меня есть. Таким образом, у меня есть ощущение, что я должен держать свой сервисный номер на низком уровне, объединяя подобные сервисы в один сервис.

Но у меня возникает вопрос, должен ли я отправить больше информации, чем нужно клиенту для этого запроса?

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

Может кто-нибудь показать мне правильное направление для подражания.

Ответы на вопрос(2)

Ваш ответ на вопрос