web-dev-qa-db-ja.com

MVC4でのかみそりベースのMVCとシングルページアプリケーション

以前はMVC3Razorエンジンを使用してページをレンダリングしていました。時々、AJAX呼び出しを使用して、RazorでレンダリングされたHTMLを転送し、JQueryを使用してページに挿入する必要がありました。新しいプロジェクトが開始されると、MVC4シングルページアプリケーションフレームワークの利用を検討します。私はそれを一目見ただけで、複雑な気持ちになりました:一方では、すべてのデータがJSONによって転送され、クライアントがそれらをレンダリングし、UI関連のロジックをエンコードするためのすべての仕事をすることを意味します。一方、クライアント(HTML + JavaScript)は、大量の魔法の文字列とその内部に隠された関係があり、維持するのが難しいように思われるため、はるかに重くなります。VSインテリセンス、タイプセーフに慣れました。 SPAの場合にクライアントスクリプトとノックアウトバインディングステートメントと交換する必要があるページをレンダリングするための.NETサーバーコード。

私がここで言及したこの明白なもの以外に、Razorと比較してSPAを使用することの長所と短所はありますか?ありがとう

21
YMC

Razorはサーバーベースのテクノロジーであり、SPA(シングルページアプリケーション)はクライアント(Webブラウザー)で使用されるアーキテクチャアプローチです。両方を一緒に使用できます。

高レベルから、SPAはレンダリングとデータ取得をクライアントに移動します。 Webサーバーは、データベースの前にあるサービス層になります。 MVCパターンは、SPAを使用する場合に最適に機能します。これには、Knockout.jsやBackbone.jsなどのフレームワークを使用できます。最終的な結果は、エクスペリエンスのようなリッチでレスポンシブなデスクトップです。

これを達成するには、降下するjavascriptプログラマーであるか、javascriptを進んで学ぶ必要があります。

はい、ビジネス要件をC#からjavascriptに移行しています。 Visual Studioでは、JavaScriptのインテリセンスが制限されています。 JavaScriptに自信を持つには、単体テストに頼る必要があります。利点は、豊富なユーザーエクスペリエンスです(GmailやGoogleマップを考えてください)。

18
Chuck Conway

ここでのトレードオフのほとんどについては、すでにかなりよく知っているように思えます。 SPAを使用するとネットワークの負荷が軽減され、処理の測定値がクライアントにシフトします。ただし、コードの複雑さが増し、システムの保守が少し難しくなります(SPAに固有のアーキテクチャ上の問題が原因ではなく、複雑さが増したためです)。

覚えておくべきもう一つのことは互換性です。あなたの質問に対する私のコメントで「誤った選択」に言及した理由は、Javascriptが無効になっている人々がサイトを使用できるようにするには、通常のページ全体のビューを提供する必要があるためです。これは、SEOのために行うのも良い考えです。クローラーは、JSが無効になっているユーザーとしてサイトを閲覧し、サイトのインデックスを作成できます。次に、サイトはそのような受信URLを適切に処理して、JSが有効になっているURLがSPAで同じコンテンツを見ていることに気付くようにする必要があります(「JSなし」ビューに不必要にダンプされるのではありません)。

上記に役立つ可能性として私が言及する他の何かがありますが、それはSPAの理想を破ります。つまり、JSONデータではなく、Ajaxでロードされたパーシャルを一部の場所で使用します。たとえば、サイトに一般的な「連絡先メール」フォームがあるとします。 SPAのコンテキスト内でロードする必要がありますが、AJAXを介してパーシャルをロードする方がおそらく簡単です。 (確かにそうですが、電子メールフォームに表示するフィールドを記述するJSONオブジェクトを使用してそれを行うことができます)。

また、「データ」よりも「コンテンツ」であるコンテンツが存在する可能性がありますが、パーシャルとAjaxを介してロードすることもできます。


SPAは間違いなく興味深いプロジェクトであり、私は自分でSPAを展開しようとしています。 JSONとパーシャルを組み合わせて使用​​しましたが、それはあなた自身の選択ではないかもしれません。

4
Andrew Barber