【发布时间】:2009-01-20 17:12:50
【问题描述】:
我注意到,在大多数 Web 应用程序中,只要在一系列页面中涉及事务,事务处理就会发生在数据库层中。在可能有大量用户运行此类事务的 Web 应用程序中,处理所有事务可能是一件至关重要的事情。我同意数据库层在执行此操作方面非常有效,并提供了许多功能来有效执行此操作。
我的问题是,如果 Web 应用程序构建在不支持事务处理的数据库之上,有没有办法在其他层处理这些事务?
【问题讨论】:
标签: transactions
我注意到,在大多数 Web 应用程序中,只要在一系列页面中涉及事务,事务处理就会发生在数据库层中。在可能有大量用户运行此类事务的 Web 应用程序中,处理所有事务可能是一件至关重要的事情。我同意数据库层在执行此操作方面非常有效,并提供了许多功能来有效执行此操作。
我的问题是,如果 Web 应用程序构建在不支持事务处理的数据库之上,有没有办法在其他层处理这些事务?
【问题讨论】:
标签: transactions
一个不处理事务的数据库?最好换个新数据库。
我不同意 - 事务没有在持久层中处理。我认为它们应该属于服务层,因为服务方法映射到工作单元和用例。单个服务调用可能涉及多个数据库和模型对象,因此它们都需要是单个 ACID 工作单元。如果持久层处理事务,这是不可能的。
这样的设计可以处理事务,即使数据库不支持它们。该服务可以在回滚的情况下实现补偿调用。如果您将该逻辑塞入持久层,这是不可能的。
在我看来,您必须在 Web 层和持久层之间有一个单独的服务接口。 Web 层仅处理 HTTP 请求、路由到服务以及制定响应以发回。服务完成工作。
服务可以是 Web 服务,如果您选择以这种方式部署它们,但有很多部署选择。单独的服务层独立于这些选择。
【讨论】: