ServiceStack请求DTO设计
我是一名.Net开发人员,用于在Microsoft Technologies上开发Web应用程序。我正在努力教育自己了解Web服务的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, }; }
如你所见,我也想在这里使用验证功能,所以我必须为每个DTO请求编写验证类。所以我觉得我应该通过将类似的服务分组到一个服务来保持我的服务号码低。
但是在我脑海中突然出现的问题是,我应该发送的信息多于客户对该请求的需求吗?
我认为我的思维方式应该改变,因为我对当前的代码感到不满意,我写的这个代码就像一个WCF人。
有人能告诉我正确的方向。