【问题标题】:Transaction handling in web appsWeb 应用程序中的事务处理
【发布时间】:2009-01-20 17:12:50
【问题描述】:

我注意到,在大多数 Web 应用程序中,只要在一系列页面中涉及事务,事务处理就会发生在数据库层中。在可能有大量用户运行此类事务的 Web 应用程序中,处理所有事务可能是一件至关重要的事情。我同意数据库层在执行此操作方面非常有效,并提供了许多功能来有效执行此操作。

我的问题是,如果 Web 应用程序构建在不支持事务处理的数据库之上,有没有办法在其他层处理这些事务?

【问题讨论】:

    标签: transactions


    【解决方案1】:

    一个不处理事务的数据库?最好换个新数据库。

    我不同意 - 事务没有在持久层中处理。我认为它们应该属于服务层,因为服务方法映射到工作单元和用例。单个服务调用可能涉及多个数据库和模型对象,因此它们都需要是单个 ACID 工作单元。如果持久层处理事务,这是不可能的。

    这样的设计可以处理事务,即使数据库不支持它们。该服务可以在回滚的情况下实现补偿调用。如果您将该逻辑塞入持久层,这是不可能的。

    在我看来,您必须在 Web 层和持久层之间有一个单独的服务接口。 Web 层仅处理 HTTP 请求、路由到服务以及制定响应以发回。服务完成工作。

    服务可以是 Web 服务,如果您选择以这种方式部署它们,但有很多部署选择。单独的服务层独立于这些选择。

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 2011-10-31
      • 1970-01-01
      • 2014-11-01
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      相关资源
      最近更新 更多