我想知道如何处理数据库的事务是正确的:
**locate database service**
**open connection**
**begin transaction**
get objects from relational database
call business logic
**commit transaction**
**close connection**
**release**
星号中的代码将通过IoC **
注入虽然业务逻辑不受数据访问代码的影响,但询问实现是否正确以及它带来的可能后果。
谢谢!
答案 0 :(得分:0)
定位数据库服务并打开通常希望保持连接打开以便重复使用的连接有足够的开销。如果连接池在应用程序中不方便,则可以执行此操作。
答案 1 :(得分:-1)
通常,您不希望在处理业务逻辑时保持事务处于打开状态。您的应用程序可能会执行冗长的计算,通过网络发送数据,调用远程服务等。在此过程中打开数据库事务会导致许多问题;其中一些是死锁,用完RDMS连接池,锁升级,丢失更新等等。
通常,Repository模块负责加载/持久化对象,包括事务管理。业务逻辑不必担心事务,它需要知道的是如何调用正确的Repository方法。另外,不要忘记存储数据可能由于多种原因而失败,因此请确保正确处理。例如,
1.从外部存储中读取对象(事务管理,如果有的话,隐藏在存储库中)
2.根据业务逻辑操作对象
3.存储操作的结果(假设您的存储是支持事务的RDMS,您开始事务,保存数据,如果成功则提交,如果错误则回滚)