2

文字列のリストを保持する DataService があります。

  • リストは高速に返される必要があるため、文字列のリストでメモリに保持しています。メモリを操作するためにGetListSetListを使用しています。

  • リストはアプリの終了/廃棄に耐える必要があるため、ファイルにも保持しています。IsoStorage を操作するためにReadListWriteListを使用しています。

  • リストはサーバーと同期する必要があるため、そのための非同期呼び出しがいくつかあります。サーバーとの同期に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? :)
}

そしてセッターも、同じように逆にするだけ。あなたのアイデア/経験を共有してください。

4

1 に答える 1

0

デコレータは役に立ちますか?

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; }
}
于 2014-02-06T14:05:05.567 に答える