1

我想知道这样处理数据库的事务是否正确:

    **locate database service**
         **open connection**
              **begin transaction**
                  get objects from relational database
                  call business logic
              **commit transaction**
         **close connection**
    **release**

星号中的代码将通过 IoC 注入**

虽然因此业务逻辑不受数据访问代码的影响,但询问实现是否正确以及它带来的可能后果。

谢谢!

4

2 回答 2

0

通常你不想在处理业务逻辑时保持事务打开。您的应用程序可能会执行冗长的计算、通过网络发送数据、调用远程服务等。在此过程中打开数据库事务会导致很多问题;其中一些是死锁、耗尽 RDMS 连接池、锁升级、丢失更新等。

一般来说,Repository 模块负责加载/持久化对象,包括事务管理。业务逻辑不必担心事务,它只需要知道如何调用 Repository 的正确方法。另外,请不要忘记,由于多种原因,存储数据可能会失败,因此请确保正确处理。例如,

1.从外部存储读取对象(事务管理,如果有的话,隐藏在Repository中)
2.根据业务逻辑操作对象
3.存储操作结果(假设你的存储是支持事务的RDMS,你开始事务,保存数据,成功则提交,错误则回滚)

于 2012-08-06T15:01:57.127 回答
0

定位数据库服务和打开通常希望保持连接打开以供重复使用的连接有足够的开销。如果在应用程序中不方便,连接池可以做到这一点。

于 2012-08-06T15:24:34.580 回答