2014-01-27 191 views
1

爲了簡單起見,我所使用的用於使用Azure移動服務的所有示例應用程序和代碼都不遵循MVVM模式。MVVM和Azure移動服務

如何編寫一個MVVM應用程序,該應用程序使用Azure移動服務訪問雲中的數據,然後將數據緩存在Windows Phone本地數據庫(模型)中。我現有的模型類是這樣的 -

[Table] 
public class ToDoItem 
{ 

    [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] 
    public int ToDoItemId 
    { 
     ... 
    } 

    [Column] 
    public string ItemName 
    { 
     ... 
    } 

    [Column] 
    public bool IsComplete 
    { 
     ... 
    } 
} 

而現在,我想用這個數據在雲中工作,樣品告訴我,我需要構造像這樣我的課 -

public class TodoItem 
{ 
    public string Id { get; set; } 

    [JsonProperty(PropertyName = "text")] 
    public string Text { get; set; } 

    [JsonProperty(PropertyName = "complete")] 
    public bool Complete { get; set; } 
} 

如何這是否適合MVVM模式?我的模型類需要什麼樣子。我是否使用兩個版本的ToDoItem類來設置/從本地數據庫獲取數據,另一個用於從雲端設置/獲取數據以及將一個數據轉換爲另一個數據?有人可以指示我的樣本嗎?

回答

0

首先,您似乎在這裏混淆了模型和數據庫。數據庫只是存儲手段。另一方面,模型是數據結構的表示。隨着這一點,讓我們來解決你的問題。

對於相同的數據,您不應該有兩種不同的型號。這可能會導致未來的不一致,而且這是一般的糟糕設計。你完全可以有不同的類的裝飾是這樣的:

[Table] 
public class ToDoItem 
{ 
    private int _toDoItemId; 

    [JsonProperty(PropertyName = "id")] 
    [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] 
    public int ToDoItemId 
    { 
     get 
     { 
      return _toDoItemId; 
     } 
     set { blah; blah; blah; } 
    } 
} 

在這裏,我已經使用這兩種類型的屬性,Column以及JsonProperty同一成員ToDoItemId上。將數據序列化爲數據庫存儲時,將考慮Column屬性,而Azure SDK將方便地忽略它,並使用JsonProperty代替。

Here,我寫了一個庫來處理Windows Phone本地數據庫和WAMS之間的同步。即使你選擇不使用它,你也可以瀏覽代碼並獲得一些提示。希望有所幫助!