我有一个DataService,其中包含一个字符串列表。


列表应该快速返回,因此我将其保留在内存中的字符串列表中。我正在使用GetList和SetList处理内存。
列表应该可以抵抗应用程序的关闭/删除,因此我也将其保存在文件中。我正在使用ReadList和WriteList与IsoStorage一起工作。
列表应该与服务器同步,所以我对此有一些异步调用。使用PushList和PullList与服务器同步。


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



编辑:我到目前为止。实际上,需要的是吸气剂

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? :)
}


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

最佳答案

装饰员可以帮忙吗?

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; }
}

关于c# - 内存,IsoStorage和服务器之间的同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19178837/

10-15 03:50