Azure移动服务的客户端模型验证

时间:2016-07-13 08:39:28

标签: c# validation azure-mobile-services model-validation

我不认为Azure的移动服务SDK(特别是离线同步内容)中有现成的模型/属性验证。

可以在服务器上执行验证,但我们也希望在客户端上执行验证和清理,就像对网络应用程序一样。

我们已经习惯在客户端上使用sqlite-net(或类似)之类的东西是不可用的。例如,

[Max(42)]
public int Foo { get; set; }

[Min(1)]
public int Bar { get; set; }

[Required]
[MaxLength(42)]
public string Baz { get; set; }

// and so on

所以我们需要做一些自定义的事情。验证属性本身很容易实现,如:

[AttributeUsage (AttributeTargets.Property)]
public class MaxAttribute : Attribute {
  public int Value { get; private set; }
  public MaxAttribute (int value) {
    Value = value;
  }
}

但是这些属性需要在某处检查,我不确定哪里会是一个好地方。

对于CRUD操作以及推送和拉取同步,存在异步调用。还需要考虑模型/属性验证失败后会发生什么,并且可能会中止推送。但它有点棘手,因为有简单的批量推送拦截器取决于是否使用"同步处理程序"。

到目前为止,我从未需要编写自己的验证。那么对于那些已经做过类似事情的人来说...... 哪里是检查这些属性的好地方?

1 个答案:

答案 0 :(得分:1)

当我制作Xamarin应用程序时,我创建了一个具有CRUD实现的接口(例如ITable<T>)(即AddRecord(T item))。然后我将有一个实现接口的具体实现(例如AzureTable)。这似乎是不必要的开销,但我可以使用MockTable作为具体实现并实现一个模拟数据表,这样我就可以测试而不用担心后端。

这个具体的实现是进行这种检查的好地方。它使您可以使用Azure Mobile Apps分发和支持的现有SQLite存储。

在我的示例中,我执行public class AzureTodoItemTable : ITable<TodoItem>然后实现AddRecord(TodoItem item) - 检查那时的约束。