У меня есть код, который считывает из таблицы список писем, которые нужно отправить и отправлять.Автоматические вызовы и откаты базы данных
Операции в порядке являются:
- установить флаг, как послал в таблице
- сделать автоматический вызов
- совершить
Причина, по которой обновление до того автоматический вызов заключается в том, что если что-то не удается, я могу откатиться и не совершать автоматический вызов. Но если бы все было наоборот, я попал бы в возможный сценарий, когда я делаю звонок, не имея возможности обновить запись (если что-то пойдет не так с db).
public class MyDao {
public void doSomethingOnDb() {
try {
// operation 1 : execute an update (setting the letter as sent)
// operation 2 : make automatic call
// operation 3 : commit
}
catch(Exception e) {
// Rollback
}
}
}
Что мне не нравится в том, что я размещая функциональность автоматических вызовов внутри дао, и это не то, что дао, как ожидается, сделать. Но если я отделяю логику, я не могу быть уверен, что флаг в таблице правдив. Мы можем сделать вызов и быть не в состоянии обновить флаг в БД:
public class MyDao {
public void doSomethingOnDb() {
try {
// operation 1 : execute an update (setting the letter as sent)
// operation 2 : commit
}
catch(Exception e) {
// Rollback
}
}
}
public void someOtherMethodSomewhere() {
try {
new MyDao().doSomethingOnDb();
// operation 3 : make the automatic call
}
catch(Exception e) {
}
}
Итак, как бы вы это сделать? Есть ли другое решение?
Хорошо, возможно, создав даже метод откат тогда. Но он менее ослаблен таким образом – user1883212