5

私は、クライアント側で多くの JavaScript を使用して、ユーザーがリストのドラッグアンドドロップの並べ替え、リストに追加するアイテムの検索などを実行できるようにする ASP.NET Web アプリケーションに取り組んでいます ( Google 検索バー)、リストからのアイテムの削除など。

クライアント側の各リスト項目と、ユーザーが項目に対して実行したアクション (追加、編集、削除、移動) に関する情報を格納するために使用する JavaScript「クラス」があります。ページがサーバーに投稿されるのは、ユーザーが完了したときだけです。ページが送信される直前に、JSON に加えられた変更に関するすべての情報をシリアル化し、ページの非表示フィールドに保存します。

私が探しているのは、C# でクラスを構築する方法に関する一般的なアドバイスです。JSON をこのクラスのインスタンスに逆シリアル化できるように、JavaScript のクラスと一致する C# のクラスがあればいいと思います。JavaScript クラスを直接複製し、JavaScript UI 実装をサポートするためだけに存在するクラスがサーバー側にあるというのは、少し奇妙に思えます。

これは一種の抽象的な質問です。クライアント側とサーバー側のオブジェクトモデルの一致を維持するという点で同様のことを行った他の人からのガイダンスを探しています。

4

1 に答える 1

1

完全に理にかなっています。この問題に直面した場合、データ型またはクラスの明確な記述を 1 つ使用し、その記述からコードを生成することを検討します。

説明は JavaScript ソース ファイルである場合があります。その JS から適切な C# コードを生成するパーサーを構築できます。または、C# ソース ファイルの場合は、その逆を行います。

RelaxNG で記述してから、C# と Javascript の両方のジェネレーターをビルド (または検索) すると、より多くのユーティリティが見つかる場合があります。この場合、RelaxNG スキーマはソース コード管理にチェックインされますが、生成された成果物はチェックインされません。


EDIT : WADLと呼ばれる初期の仕様もあります。これは、この点でも役立つと思います。私は WADL を評価していません。周辺的には、それが世界を席巻していないことはわかっていますが、なぜそうなのかはわかりません. それに関してSOに質問があります。


EDIT2:ツールが不足しているため(WADLは死産のようです)、私があなただったら、次の戦術的アプローチを試すかもしれません:

  • C# 型の属性を使用し、[DataContract]それらを決定的なものとして扱います。
  • サンプル XML JSON ドキュメントで JsonSerializer を使用して、コンパイルされたアセンブリから C# 型を丸呑みし、型をインスタンス化するツールを構築します。これは、一種の事実上の「オブジェクト モデル定義」を提供します。ツールは、インスタンス化された型が同等の JSON にラウンドトリップできることを何らかの方法で検証する必要があります。おそらく、結果のチェックサムまたは CRC を使用します。
  • そのツールをビルド プロセスの一部として実行します。

これを実現するには、その「サンプル JSON ドキュメント」をソース コードにチェックインする必要があります。また、それがアプリのさまざまな JS コードで使用していたフォームであることも確認する必要がありますJavascript は動的であるため、jslint またはその他のビルド時の検証ステップの一部として実行されるタイプ検証ツールまたは何かが必要になる場合があります。これは、Javascript ソースをチェックして、「標準」オブジェクト モデル定義を使用していることを確認します。 .

于 2010-01-21T21:35:43.190 に答える