在内存、IsoStorage 和服务器之间同步

本文关键字:服务器 之间 同步 IsoStorage 内存 | 更新日期: 2023-09-27 18:34:05

我有一个数据服务,它保存了一个字符串列表。

  • List 应该快速返回,所以我把它保存在内存中,在字符串列表中。我正在使用GetListSetList来处理内存。

  • 列表应该可以抵抗应用程序关闭/逻辑删除,所以我也将其保存在文件中。我正在使用ReadListWriteList来使用IsoStorage。

  • 列表应该与服务器同步,所以我有一些异步调用。使用 PushListPullList 与服务器同步。

有一种感觉,我正在发明一辆自行车。是否有任何模式可以平滑同步?


编辑:到目前为止我得到了什么。实际上,需要的是一个吸气者

async List<Items> GetList()
{
    if (list != null) return list; // get from memory
    var listFromIso = await IsoManager.ReadListAsync();
    if (listFromIso != null) return listFromIso; // get, well, from iso
    var answer = await NetworkManager.PullListAsync(SERVER_REQUEST);
    if (answer.Status = StatusOK) return answer.List; // get from.. guess where? :)
}

和二传手,同样只是相反。请分享您的想法/经验。

在内存、IsoStorage 和服务器之间同步

装饰师可以帮忙吗?

interface DataService
{
    IList<Items> GetList();
    void SetList(IList<Items> items);
}
class InMemoryDataService : DataService
{
    public InMemoryDataService(DataService other)
    {
        Other = other;
    }
    public IList<Items> GetList()
    {
        if (!Items.Any())
        {
            Items = Other.GetList();
        }
        return Items;
    }
    public void SetList(IList<Items> items)
    {
        Items = items;
        Other.SetList(items);
    }
    private IList<Items> Items { get; set; }
    private DataService Other { get; set; }
}
class IsoStorageDataService : DataService
{
    public IsoStorageDataService(DataService other)
    {
        Other = other;
    }
    public IList<Items> GetList()
    {
        ...
    }
    private DataService Other { get; set; }
}