具有完全同步的领域应用程序体系结构-如何在多领域体系结构中进行同步

时间:2019-11-05 00:55:55

标签: realm

在应用架构Guidelines之后,我想使一些通用数据在我的按需领域内保持同步。

作为一个简单的例子:

  1. 汽车与所有客户同步,并存储在/commonRealm
  2. Trips仅同步相关用户,并存储在/~/driverRealm

以下是该应用的最小架构

const CarSchema = {
    name: 'Car',
    primaryKey: 'id',
    properties: {
        id: {type: 'string'},
        make: {type: 'string'},
        model: {type: 'string'}
    }
};

const TripSchema = {
    name: 'Trip',
    primaryKey: 'id',
    properties: {
        id: {type: 'string'},
        name: {type: 'string'},
        car: {type: 'Car'}
    }
};

commonRealm仅包含CarSchema。 driverReam包括CarSchema和TripSchema。汽车永远不会被驾驶员更新,目的实际上是为了查找。

我找不到如何使汽车在各个领域之间保持同步,以便commonRealm中的所有更新都传播到驾驶员的driverRealm的示例。

使用subscribe()监听commonRealm Cars对象没有帮助,因为您无法访问已删除的数据等。

根据我可以从文档中推断出的内容,其架构实际上应该类似于:

const CarSchema = {
    name: 'Car',
    primaryKey: 'id',
    properties: {
        id: {type: 'string'},
        make: {type: 'string'},
        model: {type: 'string'}
    }
};

const TripSchema = {
    name: 'Trip',
    primaryKey: 'id',
    properties: {
        id: {type: 'string'},
        name: {type: 'string'},
        carId: {type: 'string'} // foreign key
    }
};

commonRealm将包含CarSchema,driverReam将仅包含TripId ,其中carId作为Car.id的类型字符串-而不是Car的 type 。客户端可以运行一个地图/循环来从commonRealm手动加入Car,例如:

        let tripsWithCar = [];
        trips.forEach(trip => {
            trip.car = commonRealm.objects('Car').filtered(`id == "${trip.carId}"`)[0];
            tripsWithCar.push(trip);
        });

如果这是正确的方法,我想从开发者那里获得更多经验的反馈。

0 个答案:

没有答案