1

为了简单起见,我遇到的所有使用 Azure 移动服务的示例应用程序和代码都没有遵循 MVVM 模式。

如何编写一个 MVVM 应用程序,该应用程序使用 Azure 移动服务访问云中的数据,然后将数据缓存在 Windows 手机本地数据库(模型)中。我现有的模型类是这样的 -

[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 类,一个用于从本地数据库设置/获取数据,另一个用于从云设置/获取数据以及将一个转换为另一个的东西?有没有人可以指点我的样本?

4

1 回答 1

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改为使用它。

在这里,我编写了一个库来处理 Windows Phone 本地数据库和 WAMS 之间的同步。即使您选择不使用它,您也可以浏览代码并获得一些提示。希望有帮助!

于 2014-03-16T05:00:22.407 回答