我有一个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/