0

我想知道在日常示例中确保数据一致性的最佳方法是什么(可能我正在寻找一种模式),其中服务通过调用网关上的某些方法来检索数据(网关可能是数据库的边界,一个网络调用甚至内存中的数据结构)。

这是我在 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)被注入到多个地方,并且通常开发人员希望调用是一致的。

确保这两个电话的计数相同的最佳方法是什么?

4

0 回答 0