在使用 DAO 模式的 Android 应用中,在哪里实现交易?
假设我有一个域类 A 和一个对应的 DAO 类。 触摸屏幕上的按钮,我想在交易中执行以下操作:
- 更新由对象 a1(属于 A 类)表示的数据库记录
- 为对象 a2(属于 A 类)创建一条新的数据库记录
我能想到的唯一选择是在 fragment 本身中这样做:
SQLiteDatabase db = new MySQLiteOpenHelper().getWritableDatabase();
db.beginTransaction();
DaoForA dao = new DaoForA();
dao.update(a1);
dao.insert(a2);
db.endTransaction();
这会导致数据层代码乱丢 fragment 。我也不想通过在其中包含此业务逻辑来淡化 DAO 类。有更清洁的替代品吗?
最佳答案
当这两个操作必须在一个事务内时,则必须从调用这两个操作的代码中控制该事务。 (可以有嵌套的事务,但无论如何,最外层的事务才是重要的。)
如果您不想在 fragment 中使用此代码,请将其放入一个函数中,您可以将该函数移入另一个对象,可能是一个单独的业务逻辑对象。 但是,此代码必须位于某处。
请注意,您的代码将始终回滚所有更改;规范的交易形式如下:
db.beginTransaction();
try {
// ... do all the stuff ...
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
关于java - 在 DAO 模式中放置交易的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26772200/