ServiceStack:依赖于数据库本身的业务逻辑

皮维拉

我正在探索 ServiceStack,但我不确定实现某些业务逻辑的最佳方式是什么。

使用“Bookings CRUD”示例,我想强制执行以下规则:

  • 只有在酒店有足够的空闲房间用于该预订的特定日期时,才能保存(创建或更新)给定的预订

请注意,我不是在问如何计算“免费房间”。

我要问的是,从架构的角度来看,应该如何做到这一点。

例如,一种方法是:

  • 创建一个请求 DTO 来查询已配置房间的数量(我们称之为“QueryRooms”)
  • 使用现有的“QueryBookings”查询数据库中存在的当前预订
  • 创建一个“:Service”类来自定义预订服务,以拦截“CreateBooking”和“UpdateBooking”请求
  • 在“CreateBooking”和“UpdateBooking”的自定义方法中,以某种方式获取“QueryRooms”和“QueryBookings”的结果,检查当前请求是否有足够的空闲房间,如果有则继续

这看起来不太干净,因为服务“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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Typeorm 列类型依赖于数据库

依赖于数据库视图的集成测试

规范化数据库,其中B依赖于A,C依赖于A,而D依赖于B + C

依赖于按钮单击从数据库中删除节点 JS

如何为依赖于其他服务或数据库的服务编写单元测试

对依赖于数据库的函数进行单元测试

链接本身依赖于静态库的静态库时,未定义的引用

使用空手道进行依赖于数据库状态的测试的好方法吗?

通过ip获取地理位置的任何api,都依赖于数据库表和范围

如何测试依赖于库的代码?

CMake 依赖于公共静态库

Cargo是否依赖于从源头构建Cargo本身?

动态依赖于数据jsonStore的changeItemTpl

如果该字段依赖于另一个字段,如何在给定日期修改数据库字段

如何使用SQL Server在另一台计算机上运行依赖于SQL数据库的应用程序?

通用接口,不依赖于特定逻辑

Bitbake 依赖于 AAA 数据包,它将依赖于 AAA-dev

CocoaPods项目依赖于本地静态C库

依赖于Python OS的库:Windows 7 SUA

如何创建依赖于Rcpp共享库的R包?

32位程序依赖于64位库

如何使元素依赖于Angular中的数据属性?

当viewModel依赖于多个模型时如何访问数据

如何添加依赖于 *ngFor 内部数据的单个元素?

使用依赖于表单提交的数据加载组件

Big Query用户的并发配额是依赖于数据集还是依赖于数据集?

业务逻辑层和数据库访问层之间的交互

如何处理仅由服务层/业务逻辑使用的数据库连接?

流量黑白业务逻辑层和数据库传入/传出收费吗?