我正在探索 ServiceStack,但我不确定实现某些业务逻辑的最佳方式是什么。
使用“Bookings CRUD”示例,我想强制执行以下规则:
请注意,我不是在问如何计算“免费房间”。
我要问的是,从架构的角度来看,应该如何做到这一点。
例如,一种方法是:
这看起来不太干净,因为服务“CreateBooking”和“UpdateBooking”将依赖于“QueryRooms”和“QueryBookings”。
使用 ServiceStatck 的优雅而高效的解决方案是什么?
您可以使用 AutoQuery DTO 使用您自己的服务实现覆盖 AutoQuery CRUD 操作。
您可以在哪里使用服务网关调用现有服务,您可以使用这些服务执行任何其他验证并在执行自动查询操作以实现 API 之前修改请求 DTO,例如:
public class MyCrudServices : Service
{
public IAutoQueryDb AutoQuery { get; set; }
public object Post(CreateBooking request)
{
var response = Gateway.Send(new QueryRooms
{
From = request.BookingStartDate,
To = request.BookingEndDate,
});
if (response.Results.Count == 0)
throw new Exception("No rooms available during those dates");
request.RoomNumber = response.Results[0].Id;
return AutoQuery.Create(request, base.Request);
}
}
注意:使用服务网关调用进程内服务是高效的,因为它直接调用 C# 方法实现,即不会产生任何 HTTP 开销。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句