2014-11-06 3 views
1

Где можно реализовать транзакции в приложении Android с использованием шаблона DAO?где размещать транзакции в шаблоне DAO

Предположим, что у меня есть класс домена A и соответствующий класс DAO. На ощупь кнопки на экране, я хочу, чтобы выполнить следующие операции в сделке:

  1. Обновление записи базы данных представляют по объектным a1 (класса А)
  2. Создать новую запись базы данных для объекта 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(); 
} 
Смежные вопросы