在DAO模式中放置事务的位置

时间:2014-11-06 05:15:21

标签: java android sqlite dao

在哪里使用DAO模式在Android应用程序中实现事务?

假设我有一个域类A和一个相应的DAO类。 触摸屏幕上的按钮,我想在事务中执行以下操作:

  1. 按对象a1(A类)
  2. 更新数据库记录
  3. 为对象a2(A类)
  4. 创建新的数据库记录

    我能想到的唯一选择就是在片段中将其作为:

    SQLiteDatabase db = new MySQLiteOpenHelper().getWritableDatabase();
    db.beginTransaction();
    DaoForA dao = new DaoForA();
    dao.update(a1);
    dao.insert(a2);
    db.endTransaction();
    

    这导致数据层代码乱丢片段。我不想通过在其中包含此业务逻辑来稀释DAO类。有更清洁的选择吗?

1 个答案:

答案 0 :(得分:1)

当两个操作必须在事务内时,必须从调用这两个操作的代码控制事务。 (可以有嵌套的交易,但无论如何,它是最重要的最外层交易。)

如果您不想在片段中使用此代码,请将其放入可以移动到另一个对象的函数中,也可以是一个单独的业务逻辑对象。 但是,此代码必须某处


请注意,您的代码将始终回滚所有更改;规范形式的交易如下:

db.beginTransaction();
try {
    // ... do all the stuff ...
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}