2014-11-06 41 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(); 
}