web-dev-qa-db-ja.com

AngularJSとASP.NET MVCの両方を使用する必要がありますか?

AngularJSとASP.NET MVCの学習を始めましたが、同じプロジェクトで両方を一緒に使用する理由がわかりませんか?

どちらもMVCフレームワークではありませんか?同じアプリケーションで両方を使用する必要がありますか?どちらかしら?

59
Natalie

シングルページアプリケーション(SPA) を構築している場合、おそらく ASP.NET MVC に "MVC"は必要ありません。ビュー、特に動的ビューは、クライアント側で配信/操作される可能性があります。 Angularはそれをうまく処理します。

しかし、おそらく100%SPAは必要ありません。じゃあ何?代わりに10ページを想像してみてください。ただし、10ページは動的動的です。ユーザーがログオンすると、右隅に小さなユーザーバッジが表示されます。それは動的ではありません。ユーザーの「スコア」や最新の自分撮りなど、気の利いたものをいくつか示しています。気の利いたものをキャッシュして、簡単に取得できるようにします。これで、2つの方法でこれを実行できます。クライアントサイドのMVC純粋主義者であれば、他のすべてのデータと同様に、最初のHTMLペイロードが配信された後にバッジデータをフェッチするだけです。しかし、おそらくあなたは純粋主義者ではありません。たぶん、あなたは純粋主義者の反対です。たぶんあなたは不純主義者だ。したがって、最初のHTMLを配信する代わりに、サーバーにポストバックし、JavaScriptを介して投稿してバッジデータを取得し、最終的にそのデータをクライアント側MVCを介してビューにマージするJavaScriptを配信する代わりに、データをマージすることを決定しますサーバー上のビューにすでにキャッシュに入っており、最初のHTMLとしてthatを配信します。最初のHTMLが配信されたら、通常のクライアント側MVCのふるまいに進みます。

したがって、サーバーとクライアントのMVCは、2001年に混乱していたコードを整理するための便利な方法にすぎません。どちらか一方を選択する必要はありません。両方を選択できます。確かに、最初のHTMLが配信された後に実行する操作が多ければ多いほど、サーバー側MVCの必要性は少なくなります。それでも、必要に応じて用意されています。たとえば、私はASP.NET MVC/Angularアプリケーションで作業しました。外部Angularテンプレートは実際には.NET MVC ActionResultである可能性があります。つまり、サーバーコントローラーがデータをビューにマージし、 Angularをテンプレートとして使用すると、Angularのコントローラーはそのデータをビューにマージできます。これは良いアイデアだとは言いませんが、MVCの1つの形式では作成できないことを示しているだけです。他は時代遅れです。

さらに、Angularをどのようにデプロイしても、最初のHTML、テンプレート、そして最も重要なのはデータを配信する方法が必要になります。簡単にするプラットフォームを使用してみませんか?多数ありますが、.NET MVCは前向きではありません。私が言ったように、最初のHTMLと外部のAngularテンプレートをMVCアクションの結果にすることができますが、.NETの Web API を使用して配信することができますWeb APIはアプリコットのコンポートと同じくらい美味しいです。

要約:MVCは単なるパターンです。このパターンは、任意の数の物理層で使用できます。使い切ることはできません。意味があれば自由に使ってください。また、 AngularはとにかくMVCではない可能性があります (これらのことに関心がある人は言う)ので、名前に「MVC」が含まれるツールで自由に使用してください。地獄は、それがMVCであっても、必要に応じて混ぜ合わせます。

75
Scant Roger

ASP.NET MVCはサーバー側のフレームワークです。どのJavaScriptライブラリを使用するかは関係ありません。 AngularJSはクライアント側のライブラリであり、サーバー側のテクノロジーがWebサイトを動かしていることを気にしません。Python、ASP.NET MVC、またはディスクに直接保存されている静的なHTMLファイルの古い束でもかまいません。

ASP.NET MVCとAngularJSはどちらも互換性があり、それらを一緒に使用するプロジェクトはたくさんあります。

必要両方を使用しますか?あんまり。それはプロジェクトのニーズに完全に依存します。

  • Webサイトが動的な場合は、サーバー側のスクリプトを使用する必要があります。 ASP.NETを使用することもできます。AngularJSを使用しているからといって、サーバー側のコードがMVCになるわけではありません。サーバーサイドアプリケーションをMVCとして構築できるようにする場合は、ASP.NET MVCを選択します。

  • 同様に、ASP.NET MVCを使用しているという事実は、クライアント側コードの構造について何も意味しません。すべてのJavaScriptを単一のファイルに入れて、構造を気にすることなく、プロジェクトに満足できるようになります(プロジェクトが成長し始めるまで)。ここでも、AngularJSはクライアント側でアプリケーションを構造化する方法として存在します。


補足:ASP.NET MVC 3の質問にタグを付けました。これが維持する必要があるレガシープロジェクトでないか、過去4年間更新されていないレガシーサーバーでアプリケーションをホストする際に特定の制約がない限り、ASPを使用できます。代わりに.NET MVC 4または5。

17

Visual Studioを使用している場合は、angularおよびMVC Web Apiコントローラーを含む新しい「シングルページアプリ」MVC Webサイトテンプレートがあります。

MVCサーバー側コードがangularクライアント側コードを呼び出すためのjsonエンドポイントを提供するため、これはうまく機能します。

さらに、MVCコントローラーを使用して、単一のページアプリの基本的なHTMLビューを提供できます。これにより、サーバー側の生成、承認、リダイレクト、エラー処理などの機能が提供されます

多くの場合、単一のページアプリでも、サーバーによって生成される少量のhtml/javascriptが必要になります。これは、さまざまな環境のエンドポイントURL、さまざまな言語、またはサーバー側で実行するほうが簡単な奇妙な認証ページなどです。

9
Ewan

3年後、ASP.NET Web APIを使用してデータを提供し、Angular(js以降))を使用してクライアント側でアプリを構成します。静的サイトを作成している場合は、 ASP.NET MVCを使用します。

2
user441521