2014-11-06 51 views
1

在哪里使用DAO模式在android应用中实现交易?在哪里放置DAO模式的交易

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

  1. 更新数据库记录代表由对象A1(A类)
  2. 创建对象的新数据库记录

我能想到的唯一选择(A级),A2是做什么的片段本身:

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

这将导致数据分层代码乱丢碎片。我不想通过在其中包含此业务逻辑来淡化DAO类。有更清洁的替代品吗?

回答

1

当两个操作必须位于一个事务中时,那么事务必须由调用这两个操作的代码来控制。 (可能有嵌套事务,但无论如何,它是最重要的最外层事务。)

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


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

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