我们知道,为了XXXXX, 我们需要将商业逻辑封装到商业逻辑层(Biz Logic Component),数据访问封装到数据访问层(Data Access Component).
有这么个问题,有些数据库访问操作需要被包含在DB Transaction里面,但是在一个DB Transactoin里面有可能会涉及到一些商业逻辑(我不肯定,DB Transaction里面的商业逻辑是否肯定可以提取出来),而商业逻辑层不应该涉及到数据库操作级别的Transaction, 这样是否不可避免的会将一些商业逻辑包含到数据访问层里面呢?
一种可能的解决放案是碰到比较复杂的事务操作时,在商业逻辑层控制事务,事务操作前,纪录初始状态,在某一步出现错误的时候用Compensation步骤里面回滚到最初的状态.比如说已经Insert纪录了,出错的时候再在Compensation里面通过某个关键字Delete这条纪录.
不知道是我对事务和商业逻辑理解有不完整,还是确实这是一个经常迷惑大家的问题?
谁有好的建议?