我有一些代码可以从表格中读取要发送的邮件列表并发送它们。
按顺序进行的操作是:
- 将标志设置为在表中发送
- 拨打自动电话
- 犯罪
在自动调用之前进行更新的原因是,如果出现故障,我可以回滚而不进行自动调用。但如果反过来,我最终可能会在无法更新记录的情况下拨打电话(如果数据库出现问题)。
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
}
}
}
我在这里不喜欢的是,我正在放置一个在 dao 中进行自动调用的功能,而这不是 dao 应该做的。但是,如果我将逻辑分开,我无法确定表中的标志是真实的。我们可以拨打电话,但无法将标志更新到数据库中:
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) {
}
}
那么,你会怎么做呢?还有其他解决方案吗?