让我们想象一下在网站上执行的任何常见操作。
用户按下按钮后,应用程序应该:
- 检查是否允许操作的条件(用户权限,某些对象的一致性,关系等)
- 更新数据库记录
- 报告
这是业务逻辑层的关注点,因为它写在大量书籍中。实际上,我们首先从 DB 中读取数据,然后将数据写入 DB。如果在我们检查期间任何其他用户/进程更改了数据,我们会将无效结果放入数据库中。似乎这个问题应该是众所周知的,但我仍然找不到好的解决方案。
问题是:为什么我们需要没有机会维护业务事务的业务逻辑层?
你可能会说 TransactionScope。那么,您如何防止读取数据被外部进程更改?如何从业务层升级锁定?如果有可能,那么它不会比在存储过程中进行事务更昂贵吗?
无法将部分逻辑带入数据库 - 只有整体。第 1 部分和第 2 部分必须在同一个事务中实现,此外,必须锁定读取数据,直到进行更新。
想法?