【发布时间】:2016-07-13 08:39:28
【问题描述】:
我认为 Azure 的移动服务 SDK 中没有开箱即用的模型/属性验证(特别是离线同步的东西)。
可以在服务器上执行验证,但我们也希望在客户端上执行验证和清理,就像对 Web 应用程序所做的那样。
所以我们习惯在客户端使用的东西,比如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 操作以及推送和拉取同步有异步调用。还需要考虑模型/属性验证失败后会发生什么,并且可能会中止推送。但它变得很棘手,因为有简单的批量推送拦截器,具体取决于是否使用“同步处理程序”。
到目前为止,我从来不需要编写自己的验证。所以对于那些做过类似事情的人... 哪里是检查这些属性的好地方?
【问题讨论】:
-
也许有一种方法可以使用
System.ComponentModel.DataAnnotations,但我怀疑那是 PCL,因此可能无法在 Xamarin 移动应用程序中使用。 -
如果您编写自定义本地存储,您可以在那里对更新进行验证。在同步处理程序中进行验证可能为时已晚,因为用户已经进行了更改并且现在想要同步它们。为什么不在 UI 本身中进行验证?
标签: c# validation azure-mobile-services model-validation