在哪里使用DAO模式在Android应用程序中实现事务?
假设我有一个域类A和一个相应的DAO类。 触摸屏幕上的按钮,我想在事务中执行以下操作:
我能想到的唯一选择就是在片段中将其作为:
SQLiteDatabase db = new MySQLiteOpenHelper().getWritableDatabase();
db.beginTransaction();
DaoForA dao = new DaoForA();
dao.update(a1);
dao.insert(a2);
db.endTransaction();
这导致数据层代码乱丢片段。我不想通过在其中包含此业务逻辑来稀释DAO类。有更清洁的选择吗?
答案 0 :(得分:1)
当两个操作必须在事务内时,必须从调用这两个操作的代码控制事务。 (可以有嵌套的交易,但无论如何,它是最重要的最外层交易。)
如果您不想在片段中使用此代码,请将其放入可以移动到另一个对象的函数中,也可以是一个单独的业务逻辑对象。 但是,此代码必须某处。
请注意,您的代码将始终回滚所有更改;规范形式的交易如下:
db.beginTransaction();
try {
// ... do all the stuff ...
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}