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.
Может кто-нибудь показать мне правильное направление для подражания.