我想知道在日常示例中确保数据一致性的最佳方法是什么(可能我正在寻找一种模式),其中服务通过调用网关上的某些方法来检索数据(网关可能是数据库的边界,一个网络调用甚至内存中的数据结构)。
这是我在 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 是 Singletons。
明显的一致性问题是另一个服务在调用myServiceMethod()
已完成doThings1()
并即将执行时修改 DataSourceGateway 中的数据doThings2()
。
这个例子被简化了,但考虑到在 dataSourceGateway 上调用不同的方法但也调用具有某些依赖关系的对象(例如 getCount 和 getAll 应该是一致的)的情况。我将其称为日常问题的原因是因为我看到相同DataSourceGateway
的 s(或 DAO)被注入到多个地方,并且通常开发人员希望调用是一致的。
确保这两个电话的计数相同的最佳方法是什么?