質問
Knockout 2.0.1、Upshot.js、および Entity Framework 4.3 を使用してアプリケーションを設計するためのベスト プラクティスは何ですか?
技術スタック
現在、私たちのテクノロジー スタックは次のようになっています。
• SQL Server 2008 R2 • ASP.NET MVC3 (C# を使用) と Entity Framework 4.3 (Code-First を使用) • jQuery 1.7.2 • jQuery-UI 1.8.2 • Knockout 2.0.1 • Upshot.js ベータ版
背景 (他の多くの開発者は、おそらく私たちのプロジェクトをここで自分のプロジェクトに置き換えることができます。)
私たちは、ユーザー エクスペリエンスが非常に重要な新しい Web アプリケーションを開発しています。アプリケーションには、密接に関連する多くのエンティティが含まれます。さまざまな理由から、これらのエンティティの多くまたはほとんどが同じ一般的な視覚的コンテキストに存在する (そしておそらく同じ「ページ」に存在する) ことは非常に望ましいことです。さらに、いくつかのページ要素は、サーバーと頻繁に通信する必要があります。
当初はプレゼンテーション層に ASP.NET MVC4 を使用するつもりでしたが、それは最善の方法ではない可能性があるとすぐに判断しました。MVC で自分たちのやりたいことを実現する方法に苦労した結果、基本的には、事実上すべての UI ロジックをクライアントに移動し、JSON データをサーバーとやり取りするだけが最善の方法であるという結論に達しました。シングル ページ アプリケーションは、クライアントのニーズに適しているようです。
Knockout を評価していましたが、ASP.NET MVC コントローラー (JSON アクション メソッドを使用) によって公開された (JavaScript での) エンティティのマッピングに必要な作業量が多かったため、Knockout を完全に「売り込む」ことはできませんでした。100 以上の異なるエンティティがあるため、この手動マッピングは非常に骨の折れる作業でした。
TechDays Netherlands (http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2159) の「Single Page Applications」に関する Steve Sanderson の素晴らしいプレゼンテーションを見て、クリスマスが早く来たと思いました。Knockout + Upshot は完璧なソリューションのように思えました。十分な時間をかけて検討することなく、UI ツールセットにいくつかの調整を加える予定であることをクライアントにすぐに通知しました。
実際のアプリケーションに付随するより微妙なアーキテクチャ上の問題に飛び込み始めると、実装方法とベスト プラクティスに関する例がほとんどなく、アイデアがさらに少ないことに気付きました。
私たちは、答えを求める建築に関する厄介な問題をいくつかまとめました。あなたが提供できるアイデアや解決策にとても感謝しています。
upshot と .NET の間で通信するための最適なメカニズムは何ですか?
Denver Developer のブログ記事「Digging into Upshot.js」(http://denverdeveloper.wordpress.com/2012/03/07/digging-into-upshot-js/) によると、によって公開されている 3 つのデータ プロバイダーがあります。 Upshot.js. これらは:
• 「デフォルトは DataProvider() で、/Submit メソッドとそれを提供する操作を使用して、jQuery の $.ajax メソッドを使用してデータを取得します。• 次は riaDataProvider() – 最初と似ていますが、データを取得するために /json/SubmitChanges メソッドと /json/{your operation} を使用します • 最後に odataDataProvider() もあります – これはかなり異なります。現在、データの更新はサポートされていません – 読み取り専用です。」</p>
デフォルトのデータ プロバイダーと RIA データ プロバイダーのどちらが優れていますか? どれがおすすめ?
受信データと送信データを管理するには、コントローラーをどのように構成する必要がありますか?
私たちの理解では、WebAPI コントローラーは「Get」メソッドを 1 つしか持てません。サーバーに対して実行される数百の異なるクエリ (フィルターのバリエーションを除く) がある場合、これは 200 の異なるコントローラー クラスが必要になることを意味しますか? もしそうなら、これは upshot の riaDataProvider() 以外のデータ プロバイダーを使用することを主張しますか?
Upshot で利用可能なメタデータにアクセスしてバインドするにはどうすればよいですか?
Upshot の想定される利点の 1 つは、データ注釈を通じて公開されたメタデータをクエリできることです。(少なくともそれが現在の理解です。) 文字列の長さ、デフォルト値、表示名、説明情報、およびフィールドが必須かどうかのエンティティ プロパティのメタデータにアクセスするにはどうすればよいでしょうか?
Knockout と Upshot では、どのクライアント側検証ライブラリを使用する必要がありますか?
おそらく、標準の jQuery Validation を使用するには、すべてのフォーム入力フィールドで「uniqueName」バインディングが必要です。jQuery Validation の使用は推奨されないようです。Knockout プラグイン ページ (https://github.com/SteveSanderson/knockout/wiki/Plugins) には、「Knockout.Validation」と「Knock-Knock Validation」の 2 つの検証プラグインがリストされています。一般的に使用する場合、Knockout での検証にはどのツールまたはプラグインが推奨されますか?
Upshot は階層内のオブジェクトの作成と更新をどのように処理しますか?
結果がサーバーにデータを書き戻す場合、Entity Framework ですでに実行できるように、親とその子の同時追加を自動的に処理しますか? 答えはイエスだと思いますが、これはまだテストしていません。