2016-07-13 13 views
1

AzureのモバイルサービスSDK(特にオフライン同期のもの)には、すぐに使用できるモデル/プロパティの検証はありません。Azureモバイルサービスのクライアント側モデルの検証

サーバー上で検証を実行できますが、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操作とプッシュ/プル同期の非同期呼び出しがあります。モデル/プロパティの検証が失敗した後に何が起きるかを考慮する必要があり、おそらくプッシュを中止します。しかし、シンクハンドラを使用するかどうかに応じて、単純な一括プッシュインターセプタが存在するため、扱いにくいものになります。

今まで自分で検証を書く必要はありませんでした。だから似たようなことをやったあなたの人たちのために... これらの属性のチェックを実行するには、どこが良いでしょうか?

+0

「System.ComponentModel.DataAnnotations」を使用する方法があるかもしれませんが、PCLであるとは思わないので、Xamarinモバイルアプリではprobbalyは動作しません。 –

+1

カスタムローカルストアを作成する場合は、そこでの更新を検証できます。同期ハンドラで検証を行うのはおそらく遅すぎます。これは、ユーザーが既に変更を加えて同期をとっているためです。なぜUI自体で検証をしないのですか? –

答えて

1

私はXamarinアプリケーションを作成するときに、CRUD実装(AddRecord(Tアイテム))を持つインターフェイス(たとえばITable<T>)を作成します。次に、インターフェイスを実装する具体的な実装(例:AzureTable)を行います。これは不必要なオーバーヘッドのようですが、具体的な実装としてMockTableを使用して模擬データテーブルを実装することができますので、バックエンドについて心配することなくテストできます。

この具体的な実装は、この種のチェックを行うのに最適な場所です。 Azure Mobile Appsが配布しサポートする既存のSQLiteストアを使用することができます。

私の例では、私はpublic class AzureTodoItemTable : ITable<TodoItem>を実行し、AddRecord(TodoItem item)を実装します - その時点で制約をチェックしてください。

+0

ああ、それは私が必要とした手がかりだった。つまり、LOCALストアのLOCAL変更に対して、すべての検証ロジックを(リポジトリクラスや@lindydonnaで提案されたカスタムキャッシュで)実行する必要があります。それはあまりにも遅いだけではないので、同期の前/中にはありませんが、理論的には、ローカルキャッシュに潜入させることで、データの有効性を暗黙に受け入れました。 –

+0

これを読んでいる人のために、私はいくつかの 'DataAnnotation'バリデーターを"借り "て、それらをモデルプロパティの属性として使用しました。次に、 'ITable 'や 'ICustomerRepository'のような型付けされたリポジトリクラスを実装しました。これは、追加、更新、削除(関係があれば難しいですが)の操作中に制約をチェックするフックを持っています。あなたは装飾されたプロパティを見つけるためにいくつかのリフレクションを実行する必要がありますが、速くクライアント側であるので、心配しないでください。あなたは、プロパティの検証のみを行うことができますか、またはファンシーを取得し、サーバー上のようにフルモデルの検証を行います。 –

関連する問題