我想知道什么是最好的方式(可能是我正在寻找一种模式)以确保数据在日常示例中的一致性,其中服务通过在网关上调用某些方法来检索数据(网关可能是边界) DB,Web调用甚至是内存中的数据结构。)
以下是我在Java中描述的案例示例:
public class MyService {
private DataSourceGateway dataSourceGateway;
public MyService(DataSourceGateway dataSourceGateway) {
this.dataSourceGateway = dataSourceGateway;
}
public void myServiceMethod() {
doThings1();
doThings2();
}
private void doThings1() {
int count = dataSourceGateway.getCount();
// do things with this count
}
private void doThings2() {
int count = dataSourceGateway.getCount();
// do things with this count which is expected to be the same as in doThings1()
}
}
假设DataSourceGateway可能不是提供事务的数据库,但内存数据结构和DataSourceGateway和Service是单例。
明显的一致性问题是当另一个服务在myServiceMethod()
的调用完成doThings1()
并且即将执行doThings2()
时修改DataSourceGateway中的数据时。
该示例已经过简化,但考虑的情况是,调用dataSourceGateway上的方法不同时,还要调用具有某些依赖关系的对象(例如,getCount和getAll应该是一致的)。我称之为日常问题的原因是因为我看到在多个地方注入了相同的DataSourceGateway
s(或DAO),并且通常开发人员希望调用是一致的。
确保计数与这两次调用相同的最佳方法是什么?