Azure 移动服务的客户端模型验证
Client-side model validation for Azure mobile services
我认为 Azure 的移动服务 SDK(特别是离线同步内容)中没有开箱即用的 model/property 验证。
可以在服务器上执行验证,但我们也想在客户端上执行验证和清理,就像对 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 操作以及推送和拉取同步的异步调用。还需要考虑 model/property 次验证失败后会发生什么,并可能中止推送。但它变得棘手,因为有简单和批量推送拦截器,具体取决于是否使用 "sync handler".
直到现在我都不需要自己编写验证。所以对于那些做过类似事情的人... 哪里是执行这些属性检查的好地方?
当我制作 Xamarin 应用程序时,我创建了一个接口(比如 ITable<T>
),其中包含 CRUD 实现(即 AddRecord(T item))。然后我将有一个实现该接口的具体实现(例如 AzureTable)。这似乎是不必要的开销,但我可以使用 MockTable 作为具体实现并实现模拟数据 table 这样我就可以进行测试而不必担心后端。
此具体实现非常适合进行此类检查。它使你能够使用 Azure 移动应用分发和支持的现有 SQLite 存储。
在我的示例中,我会执行 public class AzureTodoItemTable : ITable<TodoItem>
然后实施 AddRecord(TodoItem item)
- 检查此时的约束。
我认为 Azure 的移动服务 SDK(特别是离线同步内容)中没有开箱即用的 model/property 验证。
可以在服务器上执行验证,但我们也想在客户端上执行验证和清理,就像对 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 操作以及推送和拉取同步的异步调用。还需要考虑 model/property 次验证失败后会发生什么,并可能中止推送。但它变得棘手,因为有简单和批量推送拦截器,具体取决于是否使用 "sync handler".
直到现在我都不需要自己编写验证。所以对于那些做过类似事情的人... 哪里是执行这些属性检查的好地方?
当我制作 Xamarin 应用程序时,我创建了一个接口(比如 ITable<T>
),其中包含 CRUD 实现(即 AddRecord(T item))。然后我将有一个实现该接口的具体实现(例如 AzureTable)。这似乎是不必要的开销,但我可以使用 MockTable 作为具体实现并实现模拟数据 table 这样我就可以进行测试而不必担心后端。
此具体实现非常适合进行此类检查。它使你能够使用 Azure 移动应用分发和支持的现有 SQLite 存储。
在我的示例中,我会执行 public class AzureTodoItemTable : ITable<TodoItem>
然后实施 AddRecord(TodoItem item)
- 检查此时的约束。